Group 19: Phase 3 - Cats vs Dogs Detector (CaDoD)

Team Members

We are a group of 4 members:

Aishwarya Sinhasane - avsinhas@iu.edu (In picture, Left top)

Himanshu Joshi - hsjoshi@iu.edu (In picture, Right bottom)

Sreelaxmi Chakkadath - schakkad@iu.edu (In picture, Left bottom)

Sumitha Vellinalur Thattai - svtranga@iu.edu (In picture, Right top)

image.png

Project Abstract

The objective of our project is to classify images as either dogs or cats. Additionally, we also plan to find where the cat/dog is in the image. Although the task is simple to human eyes, computers find it hard to distinguish between images because of a plethora of factors including cluttered background, illumination conditions, deformations, occlusions among several others. We plan to build an end-to-end machine learning model which will help computers differentiate between cat and dog images with better accuracy and attain the goal of object detection by also predicting the bounding boxes.

The whole project was completed in multiple phases. In our first phase, we experimented with various techniques such as SGD, Adaboost and Gradient boost, and we chose our baseline model to be gradient boost. Linear regression was used to detect bounding boxes.

Furthermore, during the second phase, we implemented logistic and linear regression from scratch. We also built a multi-layered perceptron and calculated the accuracy and loss per epoch for classification and regression tasks. In addition to this, we built a multi-headed predictor that calculates the combined loss function from classification and the regression tasks and used it to optimize the weights and bias of the network. We also fine-tuned the model to decrease the loss.

In this phase, we extended the baseline and implemented a complex loss function (CXE + MSE) using homegrown linear and logistic regression. Additionally, we also used the transfer learning EfficientDet [D0 – D7] to train our classifier and regressor. We tuned the head layer and modified the learning rate, which yielded us with a mAP value of 0.16 for D0 and 0.09 for D7; the mAP for D7 is lesser because of the less number of epochs

Furthermore, we also build a multi headed fully convolutional neural network which gave us a test accuracy of 61%. Comparing the Efficientdet with the FCN, we see that FCN performs better in our case. But the performance might improve if we fine tune and increase the number of epochs for EfficientDet D7

Work in Phase 1 and Phase 2:

Phase 1:

  • Build multiple models – adaboost, stochastic gradient descent and gradient boost for classification; gradient boosting chosen as a baseline

  • Built a linear regression model for boundary box detection; fixed the same as a bassline

  • Built a homegrown logistic regression for image classification

Phase 2:

  • Extending from phase 0, we built home grown linear regression and combined the 2 loss functions CXE + MSE

  • Build a multi-layer perceptron using sequential and OOP; fine-tuned the model by data augmentation, adding dropout layers and regularization

  • Build an MLP that combined the loss functions of classifier and regressor which was then backpropagated to the optimizer for tuning weights and bias

  • Experimented with fully convolutional neural network

Project Meta Data - Phase 3:

  • We have completed the following task in phase 3:

  • Homegrown linear and logistic regression

  • Complex loss function (CXE + MSE) using homegrown models; this was used to fine the model in each epoch

  • Used the efficiendet [D0-D7] to model and predict the image and boundary box; compared the performance among the D0-D7

  • Implemented convolutional neural network for image classification and box detection

  • Fine-tuned the model – modifying layers, adding dropout layer, adding regularization

  • Combined the loss function and built a multi-headed cat-dog detector that combines loss function: CXE + MSE and uses the same to fine tune the weights and bias

  • Visualized the result using tensorboard

  • Compared the performance of EfficientDet and FCN

Data Description

The data we plan to use is the Kaggle data set. We will be using two files – one for image and the other for boundary:

The images are taken from the cadod.tar.gz

The boundary information of the images is from cadod.csv file

  • There are about ~13k images in the data set. There is a good balance of classes with ~6.8K cat images and ~6.1K dog images in the data set.

Image information (cadod.tar.gz):

  • There are ~13K images of various sizes and aspect ratios. Majority of the images are of 512 X 384 size

  • All the images are in RGB scale

  • The boundaries of the images are stored in the cadod.csv file

Attributes of the Boundary File (cadod.csv):

  • This has information about the image box coordinates

  • There are about 20 features in this data set

-15 numerical features

- This includes the image ID, the coordinates of the boundary boxes, and also the normalized coordinates of the boundary boxes 

-5 categorical features

-This gives information about the occlusion, depiction, truncation, etc. 

image.png

Task

  • We have completed the following task in phase 3:

  • Homegrown linear and logistic regression

  • Complex loss function (CXE + MSE) using homegrown models; this was used to fine the model in each epoch

  • Used the efficiendet [D0-D7] to model and predict the image and boundary box; compared the performance among the D0-D7

  • Implemented convolutional neural network for image classification and box detection

  • Fine-tuned the model – modifying layers, adding dropout layer, adding regularization

  • Combined the loss function and built a multi-headed cat-dog detector that combines loss function: CXE + MSE and uses the same to fine tune the weights and bias

  • Visualized the result using tensorboard

  • Compared the performance of EfficientDet and FCN

Since the data set is very large, we have carried out the above tasks were carried out only in a subset of data. Hence the results will be only directional and not accurate

In [1]:
from collections import Counter
import glob
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
from PIL import Image
from sklearn.exceptions import ConvergenceWarning
from sklearn.linear_model import SGDClassifier, SGDRegressor
from sklearn.metrics import accuracy_score, mean_squared_error, roc_auc_score
from sklearn.model_selection import train_test_split
import tarfile
from tqdm import tqdm
import warnings
import seaborn as sns
from sklearn.model_selection import ShuffleSplit
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import f1_score
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier,AdaBoostClassifier,GradientBoostingClassifier
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

Import Data

Unarchive data

In [2]:
def extract_tar(file, path):
    """
    function to extract tar.gz files to specified location
    
    Args:
        file (str): path where the file is located
        path (str): path where you want to extract
    """
    with tarfile.open(file) as tar:
        files_extracted = 0
        for member in tqdm(tar.getmembers()):
            if os.path.isfile(path + member.name[1:]):
                continue
            else:
                tar.extract(member, path)
                files_extracted += 1
        tar.close()
        if files_extracted < 3:
            print('Files already exist')
In [3]:
path = 'images/'

# extract_tar('cadod.tar.gz', path)

Load bounding box meta data

In [4]:
df = pd.read_csv('cadod.csv')
In [5]:
df.head()
Out[5]:
ImageID Source LabelName Confidence XMin XMax YMin YMax IsOccluded IsTruncated ... IsDepiction IsInside XClick1X XClick2X XClick3X XClick4X XClick1Y XClick2Y XClick3Y XClick4Y
0 0000b9fcba019d36 xclick /m/0bt9lr 1 0.165000 0.903750 0.268333 0.998333 1 1 ... 0 0 0.636250 0.903750 0.748750 0.165000 0.268333 0.506667 0.998333 0.661667
1 0000cb13febe0138 xclick /m/0bt9lr 1 0.000000 0.651875 0.000000 0.999062 1 1 ... 0 0 0.312500 0.000000 0.317500 0.651875 0.000000 0.410882 0.999062 0.999062
2 0005a9520eb22c19 xclick /m/0bt9lr 1 0.094167 0.611667 0.055626 0.998736 1 1 ... 0 0 0.487500 0.611667 0.243333 0.094167 0.055626 0.226296 0.998736 0.305942
3 0006303f02219b07 xclick /m/0bt9lr 1 0.000000 0.999219 0.000000 0.998824 1 1 ... 0 0 0.508594 0.999219 0.000000 0.478906 0.000000 0.375294 0.720000 0.998824
4 00064d23bf997652 xclick /m/0bt9lr 1 0.240938 0.906183 0.000000 0.694286 0 0 ... 0 0 0.678038 0.906183 0.240938 0.522388 0.000000 0.370000 0.424286 0.694286

5 rows × 21 columns

Preprocess

Rescale the images

In [6]:
!mkdir -p images/resized
In [127]:
%%time
# resize image and save, convert to numpy

img_arr = np.zeros((df.shape[0],128*128*3)) # initialize np.array

for i, f in enumerate(tqdm(df.ImageID)):
    img = Image.open(path+f+'.jpg')
    img_resized = img.resize((128,128))
    img_resized.save("images/resized/"+f+'.jpg', "JPEG", optimize=True)
    img_arr[i] = np.asarray(img_resized, dtype=np.uint8).flatten()
CPU times: user 4 µs, sys: 12 µs, total: 16 µs
Wall time: 27.4 µs

Plot the resized and filtered images

In [8]:
# plot random 6 images
fig, ax = plt.subplots(nrows=2, ncols=3, sharex=False, sharey=False,figsize=(15,10))
ax = ax.flatten()

for i,j in enumerate(np.random.choice(df.shape[0], size=6, replace=False)):
    img = mpimg.imread(path+'/resized/'+df.ImageID.values[j]+'.jpg')
    h, w = img.shape[:2]
    coords = df.iloc[j,4:8]
    ax[i].imshow(img)
    ax[i].set_title(df.iloc[j,2])
    ax[i].add_patch(plt.Rectangle((coords[0]*w, coords[2]*h), 
                                  coords[1]*w-coords[0]*w, coords[3]*h-coords[2]*h, 
                                  edgecolor='red', facecolor='none'))

plt.tight_layout()
plt.show()
In [9]:
# encode labels
df['Label'] = (df.LabelName == 'dog').astype(np.uint8)

Checkpoint and Save data

In [10]:
mkdir -p data
In [11]:
np.save('data/img.npy', img_arr.astype(np.uint8))
np.save('data/y_label.npy', df.Label.values)
np.save('data/y_bbox.npy', df[['XMin', 'YMin', 'XMax', 'YMax']].values.astype(np.float32))
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-11-64d0c446d405> in <module>
----> 1 np.save('data/img.npy', img_arr.astype(np.uint8))
      2 np.save('data/y_label.npy', df.Label.values)
      3 np.save('data/y_bbox.npy', df[['XMin', 'YMin', 'XMax', 'YMax']].values.astype(np.float32))

KeyboardInterrupt: 

Baseline in SKLearn

image.png

Load data

In [2]:
X = np.load('data/img.npy', allow_pickle=True)
y_label = np.load('data/y_label.npy', allow_pickle=True)
y_bbox = np.load('data/y_bbox.npy', allow_pickle=True)
In [3]:
idx_to_label = {1:'dog', 0:'cat'} # encoder

Double check that it loaded correctly

In [4]:
# plot random 6 images
fig, ax = plt.subplots(nrows=2, ncols=3, sharex=False, sharey=False,figsize=(15,10))
ax = ax.flatten()

for i,j in enumerate(np.random.choice(X.shape[0], size=6, replace=False)):
    coords = y_bbox[j] * 128
    ax[i].imshow(X[j].reshape(128,128,3))
    ax[i].set_title(idx_to_label[y_label[j]])
    ax[i].add_patch(plt.Rectangle((coords[0], coords[1]), 
                                  coords[2]-coords[0], coords[3]-coords[1], 
                                  edgecolor='red', facecolor='none'))

plt.tight_layout()
plt.show()

Homegrown Linear Regression

Linear Regression Loss Function

The mean square function formula is as follows : $ \text{MSE}({\mathbf{\theta}}; \mathbf{X}) = \dfrac{1}{m} \sum\limits_{i=1}^{m}{( \hat{y_i} - y_i)^2} $

where $m$ is the number of data points , $\hat{y_i}$ is the predicted value

Split data

In [5]:
import random
random.seed(10)
idxs = random.sample(range(0, X.shape[0]), 100)
X_final = X[idxs]
y_label_final = y_label[idxs]
In [6]:
X_final = X[idxs]
y_bbox_final = y_bbox[idxs]
In [7]:
X_train, X_test, y_train, y_test = train_test_split(X_final, y_bbox_final, test_size=0.01, random_state=27)
X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=0.1, random_state=27)

# np.random.seed(42)
# if np.max(X_train) > 4.:
#     X_train = X_train.astype(np.float32) / 255.
# if np.max(X_test) > 4.:
#     X_test = X_test.astype(np.float32) / 255.
#y_train=y_train.astype(int)
#y_test=y_test.astype(int)
In [8]:
from sklearn.preprocessing import MinMaxScaler, Normalizer
scaler = Normalizer(norm = 'l1')
X_train = scaler.fit_transform(X_train)
X_valid = scaler.transform(X_valid) #Transform test set with the same constants
#X_test = scaler.transform(X_test) #Transform test set with the same constants

Train

In [98]:
#Source - HW -5 
class BasicLinearRegressionHomegrown(object):
    
    def __init__(self, l1_reg = 0.0, l2_reg = 0.01):
        self.coef_ = None       # weight vector
        self.intercept_ = None  # bias term
        self._theta = None      # augmented weight vector, i.e., bias + weights
                                # this allows to treat all decision variables homogeneously
        self.l1_reg = l1_reg
        self.l2_reg = l2_reg
        self.history = {"cost": [], 
                        'val_cost':[],
                        "coef": [], 
                        "intercept": [], 
                        "grad": []}
        
    def _grad(self, X, y):
        """
        Calculate the gradient of the objective function

        Args:
            X(ndarray):        train objects
            y(ndarray):        answers for train objects
        Return:
            gradient(ndarray): analytical gradient vector
        """
        pred = self.predict(X)
        error = pred - y
        gradient = np.dot(X.T, error) / X.shape[0]
        #gradient[1:] += 2 * self.l2_reg * self._theta[1:] + self.l1_reg * np.sign(self._theta[1:])
        return gradient
    
    # full gradient descent, i.e., not stochastic gd
    def _gd(self, X, y, max_iter, X_val, y_val, alpha = 0.003):
        """
        Runs GD and logs error, weigths, gradient at every step

        Args:
            X(ndarray):      train objects
            y(ndarray):      answers for train objects
            max_iter(int):   number of weight updates
            alpha(floar):    step size in direction of gradient
        Return:
            None
        """
        for i in range(max_iter):
            
            self.history["coef"].append(self._theta[1:].copy())
            self.history["intercept"].append(self._theta[0].copy())
            
            mse = self.score(X, y)
            self.history["cost"].append(mse)
            
            if X_val is not None:
                mse = self.score(X_val, y_val)
                self.history["val_cost"].append(mse)
                
            # calculate gradient
            grad = self._grad(X, y)
            self.history["grad"].append(grad)
            
            # do gradient step
            self._theta -= alpha * grad
    
    def fit(self, X, y, max_iter=100, val_data = None):
        """
        Public API for fitting a linear regression model

        Args:
            X(ndarray):      train objects
            y(ndarray):      answers for train objects
            max_iter(int):   number of weight updates
        Return:
            self
        """
        # Augment the data with the bias term.
        # So we can treat the the input variables and the bias term homogeneously 
        # from a vectorization perspective
        X = np.c_[np.ones(X.shape[0]), X]
        # initialize if the first step
        if val_data is not None:
            X_val, y_val = val_data
            X_val = np.c_[np.ones(X_val.shape[0]), X_val]
        else:
            X_val = None
            y_val = None
            
        if self._theta is None:
            self._theta = np.random.rand(X.shape[1],4)
        
        # do full gradient descent
        self._gd(X, y, max_iter, X_val, y_val)
        
        self.intercept_ = self._theta[0]
        self.coef_ = self._theta[1:]
        return self
        
    def MSE(self, X, y, y_pred):
        error = y - y_pred
        mse = (np.sum(error ** 2)) / X.shape[0] 
        return mse
    
    def score(self, X, y):
        pred = self.predict(X)
        mse = np.round(mean_squared_error(y, pred),3)
        return mse
        
    def predict(self, X):
        """
        Make a prediction

        Args:
            X(ndarray):      objects
        Return:
            pred(ndarray):   predictions
        """
        # check whether X has appended bias feature or not
        if X.shape[1] == len(self._theta):
            pred = np.dot(X, self._theta)
        else:
            pred = np.dot(X, self.coef_) + self.intercept_
        #print(pred)
        return pred
In [99]:
model_homegrown = BasicLinearRegressionHomegrown(l1_reg = 0, l2_reg = 0.0)
In [104]:
#Training the model for the 4 boundaries
np.random.seed(42)

model_homegrown.fit(X_train, y_train, max_iter=1000, val_data=(X_valid, y_valid)) 
y_pred_train = model_homegrown.predict(X_train)
cost_train = model_homegrown.history["cost"]
cost_val = model_homegrown.history["val_cost"]
In [ ]:
# y_pred_train = np.concatenate((y_pred1, y_pred2,y_pred3,y_pred4),axis = 0)
# y_pred_test = np.concatenate((y_pred_test1, y_pred_test2,y_pred_test3,y_pred_test4),axis = 0)
# #y_pred_train
# #y_pred_test

Evaluation

Mean Square Error:

  • MSE gives how close our predicted regression line is to the data points
    • MSE = 1/n * Sum(True Value - Predicted value)^^2
    • Where n is the sample size
In [107]:
plt.figure(figsize=(20, 8))
plt.suptitle("Homegrown Linear Regression")
#plt.subplot(121)
plt.plot(cost_train, label="Train")
plt.plot(cost_val, label="Valid")
plt.legend(loc="upper left")
plt.xlabel("Iteration")
plt.ylabel("Loss")
#plt.xlim([0,100])
#plt.ylim([0.0, 0.3])

#plt.subplot(122)
plt.show()

Homegrown implementation of Logistic Regression

Implement a Homegrown Logistic Regression model. Extend the loss function from CXE to CXE + MSE, i.e., make it a complex multitask loss function the resulting model predicts the class and bounding box coordinates at the same time.

In [18]:
from sklearn.preprocessing import StandardScaler

X_train, X_test, y_train, y_test_label = train_test_split(X_final, y_label_final, test_size=0.01, random_state=27)
#s = StandardScaler()
#s.fit_transform(X_train)
#s.transform(X_test)
In [19]:
# Source - HW 7
class LogisticRegressionHomegrown(object):
    
    def __init__(self):
        """
        Constructor for the homgrown Logistic Regression
        
        Args:
            None
        
        Return:
            None
        """
        self.coef_ = None       
        self.intercept_ = None  
        self._theta = None      
                                
        self.history = {"cost": [], 
                        "acc": [], 
                        "val_cost":[], 
                        "val_acc": [],
                        'val_prob':[],
                       "prob":[]}
        
    def _grad(self, X, y):
        """
        Calculates the gradient of the Logistic Regression 
        objective function

        Args:
            X(ndarray):    train objects
            y(ndarray):    answers for train objects
            
        Return:
            grad(ndarray): gradient
        """
        
        n = X.shape[0]

        scores = self._predict_raw(X)

        exp_scores = np.exp(scores)
        probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
 
        probs[range(n),y] -= 1
 
        gradient = np.dot(X.T, probs) / n
        
        return gradient
    
    def _gd(self, X, y, max_iter, alpha, X_val, y_val):

        for i in range(max_iter):
            
            metrics = self.score(X, y)
            self.history["cost"].append(metrics["cost"])
            self.history["acc"].append(metrics["acc"])
            self.history["prob"].append(metrics["prob"])
            
            if X_val is not None:
                metrics_val = self.score(X_val, y_val)
                self.history["val_cost"].append(metrics_val["cost"])
                self.history["val_acc"].append(metrics_val["acc"])
                self.history["val_prob"].append(metrics_val["prob"])

            # gradient
            grad = self._grad(X, y)
            

            self._theta -= alpha * grad
    
    def fit(self, X, y, max_iter=100, alpha=0.05, val_data=None):

        X = np.c_[np.ones(X.shape[0]), X]
        if val_data is not None:
            X_val, y_val = val_data
            X_val = np.c_[np.ones(X_val.shape[0]), X_val]
        else:
            X_val = None
            y_val = None
        
        if self._theta is None:
            self._theta = np.random.rand(X.shape[1], len(np.unique(y)))
        
        
        self._gd(X, y, max_iter, alpha, X_val, y_val)
        
        
        self.intercept_ = self._theta[0]
        self.coef_ = self._theta[1:]
        
    def score(self, X, y):

        n = X.shape[0]

        scores = self._predict_raw(X)
        
        
        exp_scores = np.exp(scores)
        probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
        

        corect_logprobs = -np.log(probs[range(n),y])

        data_loss = np.sum(corect_logprobs) / n
        
        # predictions
        pred = np.argmax(scores, axis=1)
        # accuracy
        acc = accuracy_score(y, pred)

        metrics = {"acc": acc, "cost": data_loss, 'prob':corect_logprobs}
        
        return metrics
        
    def _predict_raw(self, X):

        if X.shape[1] == len(self._theta):
            scores = np.dot(X, self._theta)
        else:
            scores = np.dot(X, self.coef_) + self.intercept_
        return scores
    
    def predict(self, X):
        """
        Predicts class for each object in X
        
        Args:
            X(ndarray):      objects
        
        Return:
            pred(ndarray):   class for each object
        """
        # get scores for each class
        scores = self._predict_raw(X)
       
        pred = np.argmax(scores, axis=1)
        return pred
In [20]:
X_train, X_test, y_train, y_test_label = train_test_split(X_final, y_label_final, test_size=0.01, random_state=27)
np.random.seed(42)
if np.max(X_train) > 4.:
    X_train = X_train.astype(np.float32) / 255.
if np.max(X_test) > 4.:
    X_test = X_test.astype(np.float32) / 255.
y_train=y_train.astype(int)
y_test=y_test.astype(int)
In [21]:
class FixedLogisticRegressionHomegrown(LogisticRegressionHomegrown):
    
    def __init__(self):
        # call the constructor of the parent class
        super(FixedLogisticRegressionHomegrown, self).__init__()
        
    
    def _predict_raw(self, X):

        # check whether X has appended bias feature or not
        if X.shape[1] == len(self._theta):
            scores = np.dot(X, self._theta)
        else:
            scores = np.dot(X, self.coef_) + self.intercept_
        
        # normalize raw scores to prevent overflow
        scores -= np.max(scores, axis=1, keepdims=True)
        
        return scores

 
In [22]:
model_lr_homegrown_fixed = FixedLogisticRegressionHomegrown()
In [23]:
#Training model
model_lr_homegrown_fixed.fit(X_train, y_train, max_iter=2000, alpha=0.05, val_data=(X_test, y_test_label))
In [24]:
len(model_lr_homegrown_fixed.history["cost"])
Out[24]:
2000
In [25]:
plt.figure(figsize=(20, 8))
plt.suptitle("Homegrown Logistic Regression")
#plt.subplot(121)
plt.plot(model_lr_homegrown_fixed.history["cost"], label="Train")
plt.plot(model_lr_homegrown_fixed.history["val_cost"], label="Test")
plt.legend(loc="upper left")
plt.xlabel("Iteration")
plt.ylabel("Loss")
plt.show()
In [26]:
y_pred_test = model_lr_homegrown_fixed.predict(X_test)

Combined MSE and CXE loss.

  • We have built a homegrown logistic regression for image classification which gives the CXE loss at each epoch. Similarly, we have built a homegrown linear regression for boundary box detection which gives the MSE for each epoch.
  • The errors from both models are them combines to give us a complex loss function CXE + MSE which was then used to make predictions.

image.png

Result:

  • We ran this for 2000 epoch and found that the loss decreased steadily at each epoch
  • MSE calculated for boundary detection is combined here with CXE value. For each image data here we are calculating seperate MSE and CXE values and combining those will provide loss.
In [9]:
from collections import Counter
import glob
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
from PIL import Image
from sklearn.exceptions import ConvergenceWarning
from sklearn.linear_model import SGDClassifier, SGDRegressor
from sklearn.metrics import accuracy_score, mean_squared_error, roc_auc_score
from sklearn.model_selection import train_test_split
import tarfile
from tqdm.notebook import tqdm
import warnings
In [74]:
X = np.load('data/img.npy', allow_pickle=True)
y_label = np.load('data/y_label.npy', allow_pickle=True)
y_bbox = np.load('data/y_bbox.npy', allow_pickle=True)
In [75]:
X_train_r, X_test_r, y_train_r, y_test_r = train_test_split(X_final, y_bbox_final, test_size=0.1, random_state=27)
X_train_r, X_valid_r, y_train_r, y_valid_r = train_test_split(X_train_r, y_train_r, test_size=0.1, random_state=27)
In [76]:
X_train_c, X_test_c, y_train_c, y_test_c = train_test_split(X_final, y_label_final, test_size=0.1, random_state=27)
X_train_c, X_valid_c, y_train_c, y_valid_c = train_test_split(X_train_c, y_train_c, test_size=0.1, random_state=27)
In [77]:
# scale data for reg
from sklearn.preprocessing import MinMaxScaler, Normalizer
scaler = Normalizer(norm = 'l2')
X_train_r = scaler.fit_transform(X_train_r)
X_valid_r = scaler.transform(X_valid_r) #Transform test set with the same constants
#X_test = scaler.transform(X_test) #Transform test set with the same constants
In [78]:
# scale data for classification
np.random.seed(42)
if np.max(X_train_c) > 4.:
    X_train_c = X_train_c.astype(np.float32) / 255.
if np.max(X_valid_c) > 4.:
    X_valid_c = X_valid_c.astype(np.float32) / 255.
y_train_c=y_train_c.astype(int)
y_valid_c=y_valid_c.astype(int)
In [142]:
import warnings
warnings.filterwarnings('ignore')

class ComplexLogisticRegressionHomegrown(object):
    
    def __init__(self, l1_reg = 0.0, l2_reg = 0.01):
        """
        Constructor for the Homegrown Logistic Regression
        
        Args:
            None
        
        Return:
            None
        """
        self.l1_reg = 0.0
        self.l2_reg = 0.01
        self.coef_r = None       
        self.intercept_r = None  
        self.coef_c = None       
        self.intercept_c = None  
        self._thetaReg = None      
                               
        self._thetaClass = None
        self.history = {"CXE + MSE train_loss": [], 
                        "Train_acc_C": [], 
                        "Train_CXE_C":[],
                        "Train_MSE_R":[],
                        "CXE + MSE val_loss":[], 
                        "Val_CXE_C":[],
                        "Val_acc_C": [],
                        "Val_MSE_R":[]}
        
   
    def _gradRegression(self, X, y):
        """
        Calculates the gradient of the Linear Regression 
        objective function
        Args:
            X(ndarray):    train objects
            y(ndarray):    answers for train objects
        Return:
            grad(ndarray): gradient
        """
        pred = np.dot(X, self._thetaReg)
        error = pred - y
        gradient = np.dot(X.T, error) / X.shape[0]
        #gradient[1:] += 2 * self.l2_reg * self._thetaReg[1:] + self.l1_reg * np.sign(self._thetaReg[1:])
        #return gradient
    
#         n = X.shape[0]
        
#         # get scores for each class and example
#         # 2D matrix
#         scores = self._predict_raw(X,val=1)
#         gradient = np.dot(X.T, scores) / n
        
        return gradient
    
    # gradient for classifier
    def _gradClassification(self, X, y):
        """
        Calculates the gradient of the Logistic Regression 
        objective function
        Args:
            X(ndarray):    train objects
            y(ndarray):    answers for train objects
        Return:
            grad(ndarray): gradient
        """
#         n = X.shape[0]

#         scores = self._predict_raw(X, val=2)

#         exp_scores = np.exp(scores)
#         probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
 
#         probs[range(n),y] -= 1
 
#         gradient = np.dot(X.T, probs) / n
        
#         return gradient
        
        n = X.shape[0]
        
        scores = self._predict_raw(X,val=2)
        
        probs = 1.0/(1 + np.exp(-scores))

        probs[range(n),y] -= 1
    
        gradient = np.dot(X.T, probs) / n
        return gradient
    
    def _gd(self, X_r, y_r,X_c,y_c, max_iter, lr1, lr2, X_val_r, y_val_r, X_val_c, y_val_c):
        """
        Runs Full GD and logs error, weigths, gradient at every step

        Args:
            X(ndarray):      train objects
            y(ndarray):      answers for train objects
            max_iter(int):   number of weight updates
            alpha(floar):    step size in direction of gradient
            
        Return:
            None
        """
        for i in range(max_iter):
            
            metrics = self.score(X_r, y_r, X_c, y_c)
            print("Epoch: ",i+1,"- ", metrics)
            self.history["CXE + MSE train_loss"].append(metrics["CXE + MSE loss"])
            self.history["Train_acc_C"].append(metrics["Acc"])
            self.history["Train_CXE_C"].append(metrics["CXE"])
            self.history["Train_MSE_R"].append(metrics["MSE"])
            
            if X_val_r is not None and X_val_c is not None:
                metrics_val = self.score(X_val_r, y_val_r,X_val_c, y_val_c)
                self.history["CXE + MSE val_loss"].append(metrics_val["CXE + MSE loss"])
                self.history["Val_acc_C"].append(metrics_val["Acc"])
                self.history["Val_CXE_C"].append(metrics_val["CXE"])
                self.history["Val_MSE_R"].append(metrics_val["MSE"])

            # calculate gradient for regressor
            grad_reg = self._gradRegression(X_r, y_r)

            # calculate gradient for classifier
            grad_class = self._gradClassification(X_c, y_c)
            
            # do gradient step
            self._thetaReg -= lr1 * grad_reg

            # do gradient step
            self._thetaClass -= lr2 * grad_class
    
    def fit(self, X_r,y_r,X_c,y_c, max_iter=1000, lr1=0.001, lr2 = 0.1, val_data_r=None, val_data_c=None):
        """
        Public API to fit Logistic regression model
        Args:
            X(ndarray):      train objects
            y(ndarray):      answers for train objects
            max_iter(int):   number of weight updates
            alpha(floar):    step size in direction of gradient
        Return:
            None
        """
        X_r = np.c_[np.ones(X_r.shape[0]), X_r]
        if val_data_r is not None:
            X_val_r, y_val_r = val_data_r
            X_val_r = np.c_[np.ones(X_val_r.shape[0]), X_val_r]
        else:
            X_val_r = None
            y_val_r = None
        # initialize if the first step
        if self._thetaReg is None:
            self._thetaReg = np.random.rand(X_r.shape[1], 4)
    

        #classification
        X_c = np.c_[np.ones(X_c.shape[0]), X_c]
        if val_data_c is not None:
            X_val_c, y_val_c = val_data_c
            X_val_c = np.c_[np.ones(X_val_c.shape[0]), X_val_c]
        else:
            X_val_c = None
            y_val_c = None
        # initialize if the first step
        if self._thetaClass is None:
            self._thetaClass = np.random.rand(X_c.shape[1], len(np.unique(y_c)))
        
        # do full gradient descent
        self._gd(X_r, y_r,X_c,y_c, max_iter, lr1, lr2, X_val_r, y_val_r, X_val_c, y_val_c)
        
        # get final weigths and bias
        self.intercept_r = self._thetaReg[0]
        self.coef_r = self._thetaReg[1:]
        
        # get final weigths and bias
        self.intercept_c = self._thetaClass[0]
        self.coef_c = self._thetaClass[1:]
        
    def score(self, X_r, y_r, X_c, y_c):
        # number of training samples
        n1 = X_r.shape[0]
        n2 = X_c.shape[0]
        # get scores
        scores_r = self._predict_raw(X_r,val=1)
        scores_c = self._predict_raw(X_c,val=2)
        pred_r=scores_r
        
#         exp_scores = np.exp(scores_c)
#         probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
        

#         corect_logprobs = -np.log(probs[range(n2),y_c])

#         data_loss = np.sum(corect_logprobs) / n2
        
#         # predictions
#         pred_c = np.argmax(scores_c, axis=1)
#         # accuracy
#         acc = accuracy_score(y_c, pred_c)

#         probs = 1.0/(1 + np.exp(-scores_c))
       
#         preds_c=[ int(probs[i][ind]) for i, ind in enumerate(np.argmax(scores_c,axis=1)) ]
        
#         acc = accuracy_score(y_c, np.array(preds_c))
        
#         preds_c = np.array(preds_c)

#         exp_scores = np.exp(-scores_c)

#         probs1 = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
        
#         all_logprobs = (probs[range(n2),y_c])   
#         data_loss = np.sum(all_logprobs) / n2 
#         loss=0
#         for el in all_logprobs:
#             if (el!=1 and el!=0):
#                 loss += y_c * (-np.log (el))  + (1-y_c) * (-np.log (1-el))
          
    
    #predicted probability for classification to calculate cross entropy
        probs = 1.0/(1 + np.exp(-scores_c))
       
        preds_c=[ int(np.nan_to_num(probs[i][ind])) for i, ind in enumerate(np.argmax(scores_c,axis=1)) ]
        
        acc = accuracy_score(y_c, np.array(preds_c))
        
        preds_c = np.array(preds_c)

        exp_scores = np.exp(-scores_c)

        probs1 = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
        
        all_logprobs = (probs[range(n2),y_c])   
        data_loss = np.sum(all_logprobs) / n2 
        loss=0
        all_logprobs = np.clip(all_logprobs , 1e-15, 1 - 1e-15)
        loss = (-1/n2) * np.sum(y_c * np.log(all_logprobs) + ((1. - y_c)* np.log(1. - all_logprobs)) )
        
        # all metrics
        metrics = {"Acc": acc, 
                   "CXE + MSE loss": np.mean(loss) + np.round(mean_squared_error(y_r, pred_r),3), 
                   "MSE": np.round(mean_squared_error(y_r, pred_r),3),
                   "CXE": np.mean(loss)
                  }

        return metrics
        
    def _predict_raw(self, X, val):
        """
        Computes scores for each class and each object in X
        Args:
            X(ndarray):      objects
        
        Return:
            scores(ndarray): scores for each class and object
        """

        if val == 1:
          # check if X has appended bias feature or not 
            if X.shape[1] == len(self._thetaReg):
                scores = np.dot(X, self._thetaReg)
            else:
                scores = np.dot(X, self.coef_r) + self.intercept_r

        else:
          # check if X has appended bias feature or not 
            if X.shape[1] == len(self._thetaClass):
                scores = np.dot(X, self._thetaClass)
            else:
                scores = np.dot(X, self.coef_c) + self.intercept_c
        
        return scores
    def predict(self, X):
        """
        Predicts class for each object in X
        Args:
            X(ndarray):      objects
        Return:
            pred(ndarray):   class for each object
        """
        scores_r = self._predict_raw(X, val=1)
        scores_c = self._predict_raw(X, val=2)
        pred_c = np.argmax(scores_c, axis=1)
        return scores_r, pred_c
In [143]:
model_complex_homegrown = ComplexLogisticRegressionHomegrown(l1_reg = 0.0, l2_reg = 0.01)
In [144]:
model_complex_homegrown.fit(X_train_r, y_train_r,X_train_c, y_train_c, max_iter=500, lr1=0.004, lr2 = 0.0009, val_data_r=[X_valid_r,y_valid_r],val_data_c=[X_valid_c,y_valid_c])
Epoch:  1 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8941.85075170011, 'MSE': 8925.647, 'CXE': 16.203751700110534}
Epoch:  2 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8818.83375170011, 'MSE': 8802.63, 'CXE': 16.203751700110534}
Epoch:  3 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8697.51675170011, 'MSE': 8681.313, 'CXE': 16.203751700110534}
Epoch:  4 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8577.87675170011, 'MSE': 8561.673, 'CXE': 16.203751700110534}
Epoch:  5 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8459.88975170011, 'MSE': 8443.686, 'CXE': 16.203751700110534}
Epoch:  6 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8343.53275170011, 'MSE': 8327.329, 'CXE': 16.203751700110534}
Epoch:  7 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8228.78475170011, 'MSE': 8212.581, 'CXE': 16.203751700110534}
Epoch:  8 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8115.6217517001105, 'MSE': 8099.418, 'CXE': 16.203751700110534}
Epoch:  9 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 8004.022751700111, 'MSE': 7987.819, 'CXE': 16.203751700110534}
Epoch:  10 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7893.966751700111, 'MSE': 7877.763, 'CXE': 16.203751700110534}
Epoch:  11 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7785.430751700111, 'MSE': 7769.227, 'CXE': 16.203751700110534}
Epoch:  12 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7678.394751700111, 'MSE': 7662.191, 'CXE': 16.203751700110534}
Epoch:  13 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7572.838751700111, 'MSE': 7556.635, 'CXE': 16.203751700110534}
Epoch:  14 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7468.740751700111, 'MSE': 7452.537, 'CXE': 16.203751700110534}
Epoch:  15 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7366.0817517001105, 'MSE': 7349.878, 'CXE': 16.203751700110534}
Epoch:  16 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7264.840751700111, 'MSE': 7248.637, 'CXE': 16.203751700110534}
Epoch:  17 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7164.999751700111, 'MSE': 7148.796, 'CXE': 16.203751700110534}
Epoch:  18 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 7066.537751700111, 'MSE': 7050.334, 'CXE': 16.203751700110534}
Epoch:  19 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6969.436751700111, 'MSE': 6953.233, 'CXE': 16.203751700110534}
Epoch:  20 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6873.677751700111, 'MSE': 6857.474, 'CXE': 16.203751700110534}
Epoch:  21 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6779.242751700111, 'MSE': 6763.039, 'CXE': 16.203751700110534}
Epoch:  22 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6686.111751700111, 'MSE': 6669.908, 'CXE': 16.203751700110534}
Epoch:  23 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6594.267751700111, 'MSE': 6578.064, 'CXE': 16.203751700110534}
Epoch:  24 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6503.693751700111, 'MSE': 6487.49, 'CXE': 16.203751700110534}
Epoch:  25 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6414.370751700111, 'MSE': 6398.167, 'CXE': 16.203751700110534}
Epoch:  26 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6326.282751700111, 'MSE': 6310.079, 'CXE': 16.203751700110534}
Epoch:  27 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6239.4117517001105, 'MSE': 6223.208, 'CXE': 16.203751700110534}
Epoch:  28 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6153.74175170011, 'MSE': 6137.538, 'CXE': 16.203751700110534}
Epoch:  29 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 6069.254751700111, 'MSE': 6053.051, 'CXE': 16.203751700110534}
Epoch:  30 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5985.935751700111, 'MSE': 5969.732, 'CXE': 16.203751700110534}
Epoch:  31 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5903.76875170011, 'MSE': 5887.565, 'CXE': 16.203751700110534}
Epoch:  32 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5822.736751700111, 'MSE': 5806.533, 'CXE': 16.203751700110534}
Epoch:  33 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5742.823751700111, 'MSE': 5726.62, 'CXE': 16.203751700110534}
Epoch:  34 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5664.015751700111, 'MSE': 5647.812, 'CXE': 16.203751700110534}
Epoch:  35 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5586.297751700111, 'MSE': 5570.094, 'CXE': 16.203751700110534}
Epoch:  36 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5509.6527517001105, 'MSE': 5493.449, 'CXE': 16.203751700110534}
Epoch:  37 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5434.066751700111, 'MSE': 5417.863, 'CXE': 16.203751700110534}
Epoch:  38 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5359.525751700111, 'MSE': 5343.322, 'CXE': 16.203751700110534}
Epoch:  39 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5286.015751700111, 'MSE': 5269.812, 'CXE': 16.203751700110534}
Epoch:  40 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5213.520751700111, 'MSE': 5197.317, 'CXE': 16.203751700110534}
Epoch:  41 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5142.026751700111, 'MSE': 5125.823, 'CXE': 16.203751700110534}
Epoch:  42 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5071.521751700111, 'MSE': 5055.318, 'CXE': 16.203751700110534}
Epoch:  43 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 5001.990751700111, 'MSE': 4985.787, 'CXE': 16.203751700110534}
Epoch:  44 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4933.4207517001105, 'MSE': 4917.217, 'CXE': 16.203751700110534}
Epoch:  45 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4865.798751700111, 'MSE': 4849.595, 'CXE': 16.203751700110534}
Epoch:  46 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4799.110751700111, 'MSE': 4782.907, 'CXE': 16.203751700110534}
Epoch:  47 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4733.3447517001105, 'MSE': 4717.141, 'CXE': 16.203751700110534}
Epoch:  48 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4668.4877517001105, 'MSE': 4652.284, 'CXE': 16.203751700110534}
Epoch:  49 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4604.526751700111, 'MSE': 4588.323, 'CXE': 16.203751700110534}
Epoch:  50 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4541.448751700111, 'MSE': 4525.245, 'CXE': 16.203751700110534}
Epoch:  51 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4479.243751700111, 'MSE': 4463.04, 'CXE': 16.203751700110534}
Epoch:  52 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4417.897751700111, 'MSE': 4401.694, 'CXE': 16.203751700110534}
Epoch:  53 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4357.399751700111, 'MSE': 4341.196, 'CXE': 16.203751700110534}
Epoch:  54 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4297.7377517001105, 'MSE': 4281.534, 'CXE': 16.203751700110534}
Epoch:  55 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4238.899751700111, 'MSE': 4222.696, 'CXE': 16.203751700110534}
Epoch:  56 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4180.87575170011, 'MSE': 4164.672, 'CXE': 16.203751700110534}
Epoch:  57 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4123.6527517001105, 'MSE': 4107.449, 'CXE': 16.203751700110534}
Epoch:  58 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4067.22075170011, 'MSE': 4051.017, 'CXE': 16.203751700110534}
Epoch:  59 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 4011.56875170011, 'MSE': 3995.365, 'CXE': 16.203751700110534}
Epoch:  60 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3956.6857517001104, 'MSE': 3940.482, 'CXE': 16.203751700110534}
Epoch:  61 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3902.5617517001106, 'MSE': 3886.358, 'CXE': 16.203751700110534}
Epoch:  62 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3849.1847517001106, 'MSE': 3832.981, 'CXE': 16.203751700110534}
Epoch:  63 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3796.5457517001105, 'MSE': 3780.342, 'CXE': 16.203751700110534}
Epoch:  64 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3744.6347517001104, 'MSE': 3728.431, 'CXE': 16.203751700110534}
Epoch:  65 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3693.4407517001105, 'MSE': 3677.237, 'CXE': 16.203751700110534}
Epoch:  66 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3642.9537517001104, 'MSE': 3626.75, 'CXE': 16.203751700110534}
Epoch:  67 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3593.16475170011, 'MSE': 3576.961, 'CXE': 16.203751700110534}
Epoch:  68 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3544.0647517001103, 'MSE': 3527.861, 'CXE': 16.203751700110534}
Epoch:  69 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3495.6417517001105, 'MSE': 3479.438, 'CXE': 16.203751700110534}
Epoch:  70 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3447.8887517001103, 'MSE': 3431.685, 'CXE': 16.203751700110534}
Epoch:  71 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3400.7957517001105, 'MSE': 3384.592, 'CXE': 16.203751700110534}
Epoch:  72 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3354.3527517001103, 'MSE': 3338.149, 'CXE': 16.203751700110534}
Epoch:  73 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3308.5527517001105, 'MSE': 3292.349, 'CXE': 16.203751700110534}
Epoch:  74 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3263.3847517001104, 'MSE': 3247.181, 'CXE': 16.203751700110534}
Epoch:  75 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3218.8407517001106, 'MSE': 3202.637, 'CXE': 16.203751700110534}
Epoch:  76 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3174.91275170011, 'MSE': 3158.709, 'CXE': 16.203751700110534}
Epoch:  77 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3131.5927517001105, 'MSE': 3115.389, 'CXE': 16.203751700110534}
Epoch:  78 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3088.8697517001106, 'MSE': 3072.666, 'CXE': 16.203751700110534}
Epoch:  79 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3046.7377517001105, 'MSE': 3030.534, 'CXE': 16.203751700110534}
Epoch:  80 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 3005.1887517001105, 'MSE': 2988.985, 'CXE': 16.203751700110534}
Epoch:  81 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2964.2127517001104, 'MSE': 2948.009, 'CXE': 16.203751700110534}
Epoch:  82 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2923.8037517001103, 'MSE': 2907.6, 'CXE': 16.203751700110534}
Epoch:  83 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2883.95275170011, 'MSE': 2867.749, 'CXE': 16.203751700110534}
Epoch:  84 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2844.6527517001105, 'MSE': 2828.449, 'CXE': 16.203751700110534}
Epoch:  85 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2805.8957517001104, 'MSE': 2789.692, 'CXE': 16.203751700110534}
Epoch:  86 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2767.6747517001104, 'MSE': 2751.471, 'CXE': 16.203751700110534}
Epoch:  87 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2729.9807517001104, 'MSE': 2713.777, 'CXE': 16.203751700110534}
Epoch:  88 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2692.8087517001104, 'MSE': 2676.605, 'CXE': 16.203751700110534}
Epoch:  89 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2656.1497517001103, 'MSE': 2639.946, 'CXE': 16.203751700110534}
Epoch:  90 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2619.9977517001103, 'MSE': 2603.794, 'CXE': 16.203751700110534}
Epoch:  91 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2584.34575170011, 'MSE': 2568.142, 'CXE': 16.203751700110534}
Epoch:  92 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2549.1857517001104, 'MSE': 2532.982, 'CXE': 16.203751700110534}
Epoch:  93 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2514.5117517001104, 'MSE': 2498.308, 'CXE': 16.203751700110534}
Epoch:  94 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2480.31675170011, 'MSE': 2464.113, 'CXE': 16.203751700110534}
Epoch:  95 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2446.5947517001105, 'MSE': 2430.391, 'CXE': 16.203751700110534}
Epoch:  96 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2413.3387517001106, 'MSE': 2397.135, 'CXE': 16.203751700110534}
Epoch:  97 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2380.5417517001106, 'MSE': 2364.338, 'CXE': 16.203751700110534}
Epoch:  98 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2348.1987517001103, 'MSE': 2331.995, 'CXE': 16.203751700110534}
Epoch:  99 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2316.3017517001103, 'MSE': 2300.098, 'CXE': 16.203751700110534}
Epoch:  100 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2284.8467517001104, 'MSE': 2268.643, 'CXE': 16.203751700110534}
Epoch:  101 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2253.8257517001102, 'MSE': 2237.622, 'CXE': 16.203751700110534}
Epoch:  102 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2223.2327517001104, 'MSE': 2207.029, 'CXE': 16.203751700110534}
Epoch:  103 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2193.0637517001105, 'MSE': 2176.86, 'CXE': 16.203751700110534}
Epoch:  104 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2163.3107517001104, 'MSE': 2147.107, 'CXE': 16.203751700110534}
Epoch:  105 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2133.9687517001103, 'MSE': 2117.765, 'CXE': 16.203751700110534}
Epoch:  106 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2105.0327517001106, 'MSE': 2088.829, 'CXE': 16.203751700110534}
Epoch:  107 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2076.4967517001105, 'MSE': 2060.293, 'CXE': 16.203751700110534}
Epoch:  108 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2048.3547517001107, 'MSE': 2032.151, 'CXE': 16.203751700110534}
Epoch:  109 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 2020.6017517001105, 'MSE': 2004.398, 'CXE': 16.203751700110534}
Epoch:  110 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1993.2327517001106, 'MSE': 1977.029, 'CXE': 16.203751700110534}
Epoch:  111 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1966.2417517001106, 'MSE': 1950.038, 'CXE': 16.203751700110534}
Epoch:  112 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1939.6227517001107, 'MSE': 1923.419, 'CXE': 16.203751700110534}
Epoch:  113 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1913.3727517001107, 'MSE': 1897.169, 'CXE': 16.203751700110534}
Epoch:  114 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1887.4847517001106, 'MSE': 1871.281, 'CXE': 16.203751700110534}
Epoch:  115 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1861.9547517001106, 'MSE': 1845.751, 'CXE': 16.203751700110534}
Epoch:  116 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1836.7777517001107, 'MSE': 1820.574, 'CXE': 16.203751700110534}
Epoch:  117 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1811.9487517001105, 'MSE': 1795.745, 'CXE': 16.203751700110534}
Epoch:  118 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1787.4627517001106, 'MSE': 1771.259, 'CXE': 16.203751700110534}
Epoch:  119 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1763.3147517001107, 'MSE': 1747.111, 'CXE': 16.203751700110534}
Epoch:  120 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1739.5007517001106, 'MSE': 1723.297, 'CXE': 16.203751700110534}
Epoch:  121 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1716.0157517001105, 'MSE': 1699.812, 'CXE': 16.203751700110534}
Epoch:  122 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1692.8557517001107, 'MSE': 1676.652, 'CXE': 16.203751700110534}
Epoch:  123 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1670.0147517001105, 'MSE': 1653.811, 'CXE': 16.203751700110534}
Epoch:  124 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1647.4897517001107, 'MSE': 1631.286, 'CXE': 16.203751700110534}
Epoch:  125 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1625.2767517001107, 'MSE': 1609.073, 'CXE': 16.203751700110534}
Epoch:  126 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1603.3697517001106, 'MSE': 1587.166, 'CXE': 16.203751700110534}
Epoch:  127 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1581.7657517001105, 'MSE': 1565.562, 'CXE': 16.203751700110534}
Epoch:  128 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1560.4607517001107, 'MSE': 1544.257, 'CXE': 16.203751700110534}
Epoch:  129 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1539.4497517001107, 'MSE': 1523.246, 'CXE': 16.203751700110534}
Epoch:  130 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1518.7297517001107, 'MSE': 1502.526, 'CXE': 16.203751700110534}
Epoch:  131 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1498.2947517001105, 'MSE': 1482.091, 'CXE': 16.203751700110534}
Epoch:  132 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1478.1437517001107, 'MSE': 1461.94, 'CXE': 16.203751700110534}
Epoch:  133 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1458.2697517001106, 'MSE': 1442.066, 'CXE': 16.203751700110534}
Epoch:  134 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1438.6707517001107, 'MSE': 1422.467, 'CXE': 16.203751700110534}
Epoch:  135 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1419.3427517001105, 'MSE': 1403.139, 'CXE': 16.203751700110534}
Epoch:  136 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1400.2827517001106, 'MSE': 1384.079, 'CXE': 16.203751700110534}
Epoch:  137 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1381.4847517001106, 'MSE': 1365.281, 'CXE': 16.203751700110534}
Epoch:  138 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1362.9467517001106, 'MSE': 1346.743, 'CXE': 16.203751700110534}
Epoch:  139 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1344.6657517001106, 'MSE': 1328.462, 'CXE': 16.203751700110534}
Epoch:  140 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1326.6367517001106, 'MSE': 1310.433, 'CXE': 16.203751700110534}
Epoch:  141 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1308.8567517001106, 'MSE': 1292.653, 'CXE': 16.203751700110534}
Epoch:  142 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1291.3227517001105, 'MSE': 1275.119, 'CXE': 16.203751700110534}
Epoch:  143 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1274.0307517001106, 'MSE': 1257.827, 'CXE': 16.203751700110534}
Epoch:  144 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1256.9777517001105, 'MSE': 1240.774, 'CXE': 16.203751700110534}
Epoch:  145 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1240.1607517001107, 'MSE': 1223.957, 'CXE': 16.203751700110534}
Epoch:  146 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1223.5757517001107, 'MSE': 1207.372, 'CXE': 16.203751700110534}
Epoch:  147 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1207.2197517001107, 'MSE': 1191.016, 'CXE': 16.203751700110534}
Epoch:  148 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1191.0907517001106, 'MSE': 1174.887, 'CXE': 16.203751700110534}
Epoch:  149 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1175.1837517001106, 'MSE': 1158.98, 'CXE': 16.203751700110534}
Epoch:  150 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1159.4967517001105, 'MSE': 1143.293, 'CXE': 16.203751700110534}
Epoch:  151 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1144.0257517001105, 'MSE': 1127.822, 'CXE': 16.203751700110534}
Epoch:  152 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1128.7697517001106, 'MSE': 1112.566, 'CXE': 16.203751700110534}
Epoch:  153 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1113.7237517001106, 'MSE': 1097.52, 'CXE': 16.203751700110534}
Epoch:  154 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1098.8867517001106, 'MSE': 1082.683, 'CXE': 16.203751700110534}
Epoch:  155 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1084.2537517001106, 'MSE': 1068.05, 'CXE': 16.203751700110534}
Epoch:  156 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1069.8227517001105, 'MSE': 1053.619, 'CXE': 16.203751700110534}
Epoch:  157 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1055.5917517001105, 'MSE': 1039.388, 'CXE': 16.203751700110534}
Epoch:  158 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1041.5577517001107, 'MSE': 1025.354, 'CXE': 16.203751700110534}
Epoch:  159 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1027.7167517001105, 'MSE': 1011.513, 'CXE': 16.203751700110534}
Epoch:  160 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1014.0677517001105, 'MSE': 997.864, 'CXE': 16.203751700110534}
Epoch:  161 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 1000.6067517001105, 'MSE': 984.403, 'CXE': 16.203751700110534}
Epoch:  162 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 987.3317517001105, 'MSE': 971.128, 'CXE': 16.203751700110534}
Epoch:  163 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 974.2407517001105, 'MSE': 958.037, 'CXE': 16.203751700110534}
Epoch:  164 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 961.3307517001105, 'MSE': 945.127, 'CXE': 16.203751700110534}
Epoch:  165 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 948.5987517001105, 'MSE': 932.395, 'CXE': 16.203751700110534}
Epoch:  166 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 936.0427517001106, 'MSE': 919.839, 'CXE': 16.203751700110534}
Epoch:  167 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 923.6597517001105, 'MSE': 907.456, 'CXE': 16.203751700110534}
Epoch:  168 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 911.4477517001105, 'MSE': 895.244, 'CXE': 16.203751700110534}
Epoch:  169 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 899.4057517001105, 'MSE': 883.202, 'CXE': 16.203751700110534}
Epoch:  170 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 887.5287517001105, 'MSE': 871.325, 'CXE': 16.203751700110534}
Epoch:  171 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 875.8167517001106, 'MSE': 859.613, 'CXE': 16.203751700110534}
Epoch:  172 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 864.2667517001105, 'MSE': 848.063, 'CXE': 16.203751700110534}
Epoch:  173 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 852.8757517001105, 'MSE': 836.672, 'CXE': 16.203751700110534}
Epoch:  174 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 841.6417517001105, 'MSE': 825.438, 'CXE': 16.203751700110534}
Epoch:  175 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 830.5637517001105, 'MSE': 814.36, 'CXE': 16.203751700110534}
Epoch:  176 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 819.6387517001104, 'MSE': 803.435, 'CXE': 16.203751700110534}
Epoch:  177 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 808.8647517001104, 'MSE': 792.661, 'CXE': 16.203751700110534}
Epoch:  178 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 798.2397517001104, 'MSE': 782.036, 'CXE': 16.203751700110534}
Epoch:  179 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 787.7607517001105, 'MSE': 771.557, 'CXE': 16.203751700110534}
Epoch:  180 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 777.4267517001105, 'MSE': 761.223, 'CXE': 16.203751700110534}
Epoch:  181 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 767.2357517001105, 'MSE': 751.032, 'CXE': 16.203751700110534}
Epoch:  182 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 757.1857517001105, 'MSE': 740.982, 'CXE': 16.203751700110534}
Epoch:  183 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 747.2747517001105, 'MSE': 731.071, 'CXE': 16.203751700110534}
Epoch:  184 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 737.5007517001105, 'MSE': 721.297, 'CXE': 16.203751700110534}
Epoch:  185 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 727.8607517001105, 'MSE': 711.657, 'CXE': 16.203751700110534}
Epoch:  186 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 718.3547517001105, 'MSE': 702.151, 'CXE': 16.203751700110534}
Epoch:  187 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 708.9807517001105, 'MSE': 692.777, 'CXE': 16.203751700110534}
Epoch:  188 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 699.7347517001105, 'MSE': 683.531, 'CXE': 16.203751700110534}
Epoch:  189 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 690.6177517001105, 'MSE': 674.414, 'CXE': 16.203751700110534}
Epoch:  190 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 681.6257517001105, 'MSE': 665.422, 'CXE': 16.203751700110534}
Epoch:  191 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 672.7587517001105, 'MSE': 656.555, 'CXE': 16.203751700110534}
Epoch:  192 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 664.0137517001104, 'MSE': 647.81, 'CXE': 16.203751700110534}
Epoch:  193 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 655.3907517001105, 'MSE': 639.187, 'CXE': 16.203751700110534}
Epoch:  194 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 646.8857517001105, 'MSE': 630.682, 'CXE': 16.203751700110534}
Epoch:  195 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 638.4987517001105, 'MSE': 622.295, 'CXE': 16.203751700110534}
Epoch:  196 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 630.2267517001105, 'MSE': 614.023, 'CXE': 16.203751700110534}
Epoch:  197 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 622.0697517001105, 'MSE': 605.866, 'CXE': 16.203751700110534}
Epoch:  198 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 614.0257517001105, 'MSE': 597.822, 'CXE': 16.203751700110534}
Epoch:  199 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 606.0917517001105, 'MSE': 589.888, 'CXE': 16.203751700110534}
Epoch:  200 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 598.2687517001106, 'MSE': 582.065, 'CXE': 16.203751700110534}
Epoch:  201 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 590.5527517001105, 'MSE': 574.349, 'CXE': 16.203751700110534}
Epoch:  202 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 582.9437517001105, 'MSE': 566.74, 'CXE': 16.203751700110534}
Epoch:  203 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 575.4407517001105, 'MSE': 559.237, 'CXE': 16.203751700110534}
Epoch:  204 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 568.0397517001105, 'MSE': 551.836, 'CXE': 16.203751700110534}
Epoch:  205 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 560.7417517001105, 'MSE': 544.538, 'CXE': 16.203751700110534}
Epoch:  206 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 553.5447517001105, 'MSE': 537.341, 'CXE': 16.203751700110534}
Epoch:  207 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 546.4477517001105, 'MSE': 530.244, 'CXE': 16.203751700110534}
Epoch:  208 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 539.4477517001105, 'MSE': 523.244, 'CXE': 16.203751700110534}
Epoch:  209 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 532.5447517001105, 'MSE': 516.341, 'CXE': 16.203751700110534}
Epoch:  210 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 525.7377517001105, 'MSE': 509.534, 'CXE': 16.203751700110534}
Epoch:  211 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 519.0237517001106, 'MSE': 502.82, 'CXE': 16.203751700110534}
Epoch:  212 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 512.4037517001105, 'MSE': 496.2, 'CXE': 16.203751700110534}
Epoch:  213 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 505.8737517001106, 'MSE': 489.67, 'CXE': 16.203751700110534}
Epoch:  214 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 499.43475170011055, 'MSE': 483.231, 'CXE': 16.203751700110534}
Epoch:  215 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 493.08475170011053, 'MSE': 476.881, 'CXE': 16.203751700110534}
Epoch:  216 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 486.8227517001106, 'MSE': 470.619, 'CXE': 16.203751700110534}
Epoch:  217 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 480.64675170011054, 'MSE': 464.443, 'CXE': 16.203751700110534}
Epoch:  218 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 474.55675170011057, 'MSE': 458.353, 'CXE': 16.203751700110534}
Epoch:  219 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 468.54975170011056, 'MSE': 452.346, 'CXE': 16.203751700110534}
Epoch:  220 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 462.62675170011056, 'MSE': 446.423, 'CXE': 16.203751700110534}
Epoch:  221 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 456.78575170011055, 'MSE': 440.582, 'CXE': 16.203751700110534}
Epoch:  222 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 451.0247517001106, 'MSE': 434.821, 'CXE': 16.203751700110534}
Epoch:  223 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 445.34275170011057, 'MSE': 429.139, 'CXE': 16.203751700110534}
Epoch:  224 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 439.74075170011054, 'MSE': 423.537, 'CXE': 16.203751700110534}
Epoch:  225 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 434.2147517001106, 'MSE': 418.011, 'CXE': 16.203751700110534}
Epoch:  226 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 428.76575170011057, 'MSE': 412.562, 'CXE': 16.203751700110534}
Epoch:  227 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 423.3927517001106, 'MSE': 407.189, 'CXE': 16.203751700110534}
Epoch:  228 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 418.09275170011057, 'MSE': 401.889, 'CXE': 16.203751700110534}
Epoch:  229 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 412.86675170011057, 'MSE': 396.663, 'CXE': 16.203751700110534}
Epoch:  230 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 407.7127517001106, 'MSE': 391.509, 'CXE': 16.203751700110534}
Epoch:  231 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 402.62975170011055, 'MSE': 386.426, 'CXE': 16.203751700110534}
Epoch:  232 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 397.61675170011057, 'MSE': 381.413, 'CXE': 16.203751700110534}
Epoch:  233 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 392.6737517001106, 'MSE': 376.47, 'CXE': 16.203751700110534}
Epoch:  234 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 387.79775170011055, 'MSE': 371.594, 'CXE': 16.203751700110534}
Epoch:  235 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 382.99075170011054, 'MSE': 366.787, 'CXE': 16.203751700110534}
Epoch:  236 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 378.2487517001106, 'MSE': 362.045, 'CXE': 16.203751700110534}
Epoch:  237 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 373.5727517001106, 'MSE': 357.369, 'CXE': 16.203751700110534}
Epoch:  238 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 368.96175170011054, 'MSE': 352.758, 'CXE': 16.203751700110534}
Epoch:  239 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 364.41375170011054, 'MSE': 348.21, 'CXE': 16.203751700110534}
Epoch:  240 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 359.92975170011056, 'MSE': 343.726, 'CXE': 16.203751700110534}
Epoch:  241 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 355.50675170011056, 'MSE': 339.303, 'CXE': 16.203751700110534}
Epoch:  242 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 351.14475170011053, 'MSE': 334.941, 'CXE': 16.203751700110534}
Epoch:  243 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 346.84375170011054, 'MSE': 330.64, 'CXE': 16.203751700110534}
Epoch:  244 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 342.6017517001106, 'MSE': 326.398, 'CXE': 16.203751700110534}
Epoch:  245 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 338.41775170011056, 'MSE': 322.214, 'CXE': 16.203751700110534}
Epoch:  246 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 334.2917517001106, 'MSE': 318.088, 'CXE': 16.203751700110534}
Epoch:  247 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 330.22375170011054, 'MSE': 314.02, 'CXE': 16.203751700110534}
Epoch:  248 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 326.21075170011056, 'MSE': 310.007, 'CXE': 16.203751700110534}
Epoch:  249 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 322.25375170011057, 'MSE': 306.05, 'CXE': 16.203751700110534}
Epoch:  250 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 318.3517517001106, 'MSE': 302.148, 'CXE': 16.203751700110534}
Epoch:  251 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 314.50275170011054, 'MSE': 298.299, 'CXE': 16.203751700110534}
Epoch:  252 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 310.7077517001106, 'MSE': 294.504, 'CXE': 16.203751700110534}
Epoch:  253 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 306.9647517001106, 'MSE': 290.761, 'CXE': 16.203751700110534}
Epoch:  254 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 303.27375170011055, 'MSE': 287.07, 'CXE': 16.203751700110534}
Epoch:  255 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 299.63375170011057, 'MSE': 283.43, 'CXE': 16.203751700110534}
Epoch:  256 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 296.04375170011053, 'MSE': 279.84, 'CXE': 16.203751700110534}
Epoch:  257 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 292.50275170011054, 'MSE': 276.299, 'CXE': 16.203751700110534}
Epoch:  258 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 289.01175170011055, 'MSE': 272.808, 'CXE': 16.203751700110534}
Epoch:  259 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 285.56875170011057, 'MSE': 269.365, 'CXE': 16.203751700110534}
Epoch:  260 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 282.17275170011055, 'MSE': 265.969, 'CXE': 16.203751700110534}
Epoch:  261 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 278.82375170011056, 'MSE': 262.62, 'CXE': 16.203751700110534}
Epoch:  262 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 275.52175170011054, 'MSE': 259.318, 'CXE': 16.203751700110534}
Epoch:  263 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 272.26475170011054, 'MSE': 256.061, 'CXE': 16.203751700110534}
Epoch:  264 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 269.05275170011055, 'MSE': 252.849, 'CXE': 16.203751700110534}
Epoch:  265 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 265.88475170011054, 'MSE': 249.681, 'CXE': 16.203751700110534}
Epoch:  266 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 262.7607517001105, 'MSE': 246.557, 'CXE': 16.203751700110534}
Epoch:  267 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 259.68075170011053, 'MSE': 243.477, 'CXE': 16.203751700110534}
Epoch:  268 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 256.6427517001105, 'MSE': 240.439, 'CXE': 16.203751700110534}
Epoch:  269 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 253.64575170011054, 'MSE': 237.442, 'CXE': 16.203751700110534}
Epoch:  270 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 250.69175170011053, 'MSE': 234.488, 'CXE': 16.203751700110534}
Epoch:  271 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 247.77775170011054, 'MSE': 231.574, 'CXE': 16.203751700110534}
Epoch:  272 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 244.90375170011052, 'MSE': 228.7, 'CXE': 16.203751700110534}
Epoch:  273 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 242.06975170011054, 'MSE': 225.866, 'CXE': 16.203751700110534}
Epoch:  274 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 239.27475170011053, 'MSE': 223.071, 'CXE': 16.203751700110534}
Epoch:  275 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 236.51875170011053, 'MSE': 220.315, 'CXE': 16.203751700110534}
Epoch:  276 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 233.79975170011053, 'MSE': 217.596, 'CXE': 16.203751700110534}
Epoch:  277 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 231.11975170011053, 'MSE': 214.916, 'CXE': 16.203751700110534}
Epoch:  278 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 228.47575170011052, 'MSE': 212.272, 'CXE': 16.203751700110534}
Epoch:  279 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 225.86875170011052, 'MSE': 209.665, 'CXE': 16.203751700110534}
Epoch:  280 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 223.29775170011052, 'MSE': 207.094, 'CXE': 16.203751700110534}
Epoch:  281 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 220.76175170011052, 'MSE': 204.558, 'CXE': 16.203751700110534}
Epoch:  282 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 218.26075170011052, 'MSE': 202.057, 'CXE': 16.203751700110534}
Epoch:  283 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 215.79475170011054, 'MSE': 199.591, 'CXE': 16.203751700110534}
Epoch:  284 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 213.36275170011052, 'MSE': 197.159, 'CXE': 16.203751700110534}
Epoch:  285 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 210.96475170011053, 'MSE': 194.761, 'CXE': 16.203751700110534}
Epoch:  286 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 208.59875170011054, 'MSE': 192.395, 'CXE': 16.203751700110534}
Epoch:  287 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 206.26675170011052, 'MSE': 190.063, 'CXE': 16.203751700110534}
Epoch:  288 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 203.96575170011053, 'MSE': 187.762, 'CXE': 16.203751700110534}
Epoch:  289 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 201.69675170011053, 'MSE': 185.493, 'CXE': 16.203751700110534}
Epoch:  290 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 199.45975170011053, 'MSE': 183.256, 'CXE': 16.203751700110534}
Epoch:  291 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 197.25275170011054, 'MSE': 181.049, 'CXE': 16.203751700110534}
Epoch:  292 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 195.07675170011052, 'MSE': 178.873, 'CXE': 16.203751700110534}
Epoch:  293 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 192.93075170011053, 'MSE': 176.727, 'CXE': 16.203751700110534}
Epoch:  294 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 190.81475170011052, 'MSE': 174.611, 'CXE': 16.203751700110534}
Epoch:  295 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 188.72775170011053, 'MSE': 172.524, 'CXE': 16.203751700110534}
Epoch:  296 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 186.66975170011054, 'MSE': 170.466, 'CXE': 16.203751700110534}
Epoch:  297 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 184.63975170011054, 'MSE': 168.436, 'CXE': 16.203751700110534}
Epoch:  298 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 182.63775170011053, 'MSE': 166.434, 'CXE': 16.203751700110534}
Epoch:  299 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 180.66375170011054, 'MSE': 164.46, 'CXE': 16.203751700110534}
Epoch:  300 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 178.71675170011054, 'MSE': 162.513, 'CXE': 16.203751700110534}
Epoch:  301 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 176.79575170011054, 'MSE': 160.592, 'CXE': 16.203751700110534}
Epoch:  302 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 174.90275170011054, 'MSE': 158.699, 'CXE': 16.203751700110534}
Epoch:  303 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 173.03475170011052, 'MSE': 156.831, 'CXE': 16.203751700110534}
Epoch:  304 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 171.19375170011054, 'MSE': 154.99, 'CXE': 16.203751700110534}
Epoch:  305 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 169.37675170011053, 'MSE': 153.173, 'CXE': 16.203751700110534}
Epoch:  306 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 167.58575170011054, 'MSE': 151.382, 'CXE': 16.203751700110534}
Epoch:  307 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 165.81975170011054, 'MSE': 149.616, 'CXE': 16.203751700110534}
Epoch:  308 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 164.07775170011053, 'MSE': 147.874, 'CXE': 16.203751700110534}
Epoch:  309 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 162.35975170011054, 'MSE': 146.156, 'CXE': 16.203751700110534}
Epoch:  310 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 160.66475170011054, 'MSE': 144.461, 'CXE': 16.203751700110534}
Epoch:  311 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 158.99375170011052, 'MSE': 142.79, 'CXE': 16.203751700110534}
Epoch:  312 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 157.34675170011053, 'MSE': 141.143, 'CXE': 16.203751700110534}
Epoch:  313 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 155.72175170011053, 'MSE': 139.518, 'CXE': 16.203751700110534}
Epoch:  314 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 154.11875170011052, 'MSE': 137.915, 'CXE': 16.203751700110534}
Epoch:  315 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 152.53775170011053, 'MSE': 136.334, 'CXE': 16.203751700110534}
Epoch:  316 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 150.97975170011054, 'MSE': 134.776, 'CXE': 16.203751700110534}
Epoch:  317 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 149.44175170011053, 'MSE': 133.238, 'CXE': 16.203751700110534}
Epoch:  318 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 147.92575170011054, 'MSE': 131.722, 'CXE': 16.203751700110534}
Epoch:  319 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 146.43075170011053, 'MSE': 130.227, 'CXE': 16.203751700110534}
Epoch:  320 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 144.95675170011052, 'MSE': 128.753, 'CXE': 16.203751700110534}
Epoch:  321 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 143.50275170011054, 'MSE': 127.299, 'CXE': 16.203751700110534}
Epoch:  322 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 142.06875170011054, 'MSE': 125.865, 'CXE': 16.203751700110534}
Epoch:  323 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 140.65375170011055, 'MSE': 124.45, 'CXE': 16.203751700110534}
Epoch:  324 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 139.25975170011054, 'MSE': 123.056, 'CXE': 16.203751700110534}
Epoch:  325 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 137.88375170011054, 'MSE': 121.68, 'CXE': 16.203751700110534}
Epoch:  326 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 136.52775170011054, 'MSE': 120.324, 'CXE': 16.203751700110534}
Epoch:  327 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 135.18975170011055, 'MSE': 118.986, 'CXE': 16.203751700110534}
Epoch:  328 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 133.87075170011053, 'MSE': 117.667, 'CXE': 16.203751700110534}
Epoch:  329 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 132.56975170011054, 'MSE': 116.366, 'CXE': 16.203751700110534}
Epoch:  330 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 131.28575170011052, 'MSE': 115.082, 'CXE': 16.203751700110534}
Epoch:  331 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 130.02075170011054, 'MSE': 113.817, 'CXE': 16.203751700110534}
Epoch:  332 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 128.77275170011055, 'MSE': 112.569, 'CXE': 16.203751700110534}
Epoch:  333 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 127.54175170011052, 'MSE': 111.338, 'CXE': 16.203751700110534}
Epoch:  334 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 126.32875170011053, 'MSE': 110.125, 'CXE': 16.203751700110534}
Epoch:  335 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 125.13175170011053, 'MSE': 108.928, 'CXE': 16.203751700110534}
Epoch:  336 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 123.95075170011053, 'MSE': 107.747, 'CXE': 16.203751700110534}
Epoch:  337 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 122.78675170011053, 'MSE': 106.583, 'CXE': 16.203751700110534}
Epoch:  338 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 121.63875170011053, 'MSE': 105.435, 'CXE': 16.203751700110534}
Epoch:  339 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 120.50575170011054, 'MSE': 104.302, 'CXE': 16.203751700110534}
Epoch:  340 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 119.38975170011054, 'MSE': 103.186, 'CXE': 16.203751700110534}
Epoch:  341 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 118.28775170011053, 'MSE': 102.084, 'CXE': 16.203751700110534}
Epoch:  342 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 117.20175170011053, 'MSE': 100.998, 'CXE': 16.203751700110534}
Epoch:  343 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 116.13075170011054, 'MSE': 99.927, 'CXE': 16.203751700110534}
Epoch:  344 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 115.07475170011053, 'MSE': 98.871, 'CXE': 16.203751700110534}
Epoch:  345 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 114.03275170011052, 'MSE': 97.829, 'CXE': 16.203751700110534}
Epoch:  346 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 113.00575170011054, 'MSE': 96.802, 'CXE': 16.203751700110534}
Epoch:  347 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 111.99175170011053, 'MSE': 95.788, 'CXE': 16.203751700110534}
Epoch:  348 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 110.99275170011053, 'MSE': 94.789, 'CXE': 16.203751700110534}
Epoch:  349 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 110.00775170011053, 'MSE': 93.804, 'CXE': 16.203751700110534}
Epoch:  350 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 109.03575170011052, 'MSE': 92.832, 'CXE': 16.203751700110534}
Epoch:  351 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 108.07675170011053, 'MSE': 91.873, 'CXE': 16.203751700110534}
Epoch:  352 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 107.13175170011053, 'MSE': 90.928, 'CXE': 16.203751700110534}
Epoch:  353 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 106.19975170011053, 'MSE': 89.996, 'CXE': 16.203751700110534}
Epoch:  354 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 105.27975170011052, 'MSE': 89.076, 'CXE': 16.203751700110534}
Epoch:  355 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 104.37375170011053, 'MSE': 88.17, 'CXE': 16.203751700110534}
Epoch:  356 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 103.47975170011053, 'MSE': 87.276, 'CXE': 16.203751700110534}
Epoch:  357 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 102.59775170011054, 'MSE': 86.394, 'CXE': 16.203751700110534}
Epoch:  358 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 101.72775170011053, 'MSE': 85.524, 'CXE': 16.203751700110534}
Epoch:  359 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 100.86975170011053, 'MSE': 84.666, 'CXE': 16.203751700110534}
Epoch:  360 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 100.02375170011052, 'MSE': 83.82, 'CXE': 16.203751700110534}
Epoch:  361 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 99.18975170011053, 'MSE': 82.986, 'CXE': 16.203751700110534}
Epoch:  362 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 98.36775170011053, 'MSE': 82.164, 'CXE': 16.203751700110534}
Epoch:  363 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 97.55575170011053, 'MSE': 81.352, 'CXE': 16.203751700110534}
Epoch:  364 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 96.75575170011054, 'MSE': 80.552, 'CXE': 16.203751700110534}
Epoch:  365 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 95.96675170011054, 'MSE': 79.763, 'CXE': 16.203751700110534}
Epoch:  366 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 95.18875170011053, 'MSE': 78.985, 'CXE': 16.203751700110534}
Epoch:  367 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 94.42075170011053, 'MSE': 78.217, 'CXE': 16.203751700110534}
Epoch:  368 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 93.66375170011052, 'MSE': 77.46, 'CXE': 16.203751700110534}
Epoch:  369 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 92.91775170011053, 'MSE': 76.714, 'CXE': 16.203751700110534}
Epoch:  370 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 92.18075170011053, 'MSE': 75.977, 'CXE': 16.203751700110534}
Epoch:  371 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 91.45475170011053, 'MSE': 75.251, 'CXE': 16.203751700110534}
Epoch:  372 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 90.73875170011053, 'MSE': 74.535, 'CXE': 16.203751700110534}
Epoch:  373 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 90.03275170011052, 'MSE': 73.829, 'CXE': 16.203751700110534}
Epoch:  374 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 89.33575170011054, 'MSE': 73.132, 'CXE': 16.203751700110534}
Epoch:  375 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 88.64975170011053, 'MSE': 72.446, 'CXE': 16.203751700110534}
Epoch:  376 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 87.97175170011053, 'MSE': 71.768, 'CXE': 16.203751700110534}
Epoch:  377 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 87.30375170011052, 'MSE': 71.1, 'CXE': 16.203751700110534}
Epoch:  378 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 86.64475170011053, 'MSE': 70.441, 'CXE': 16.203751700110534}
Epoch:  379 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 85.99475170011053, 'MSE': 69.791, 'CXE': 16.203751700110534}
Epoch:  380 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 85.35475170011053, 'MSE': 69.151, 'CXE': 16.203751700110534}
Epoch:  381 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 84.72275170011054, 'MSE': 68.519, 'CXE': 16.203751700110534}
Epoch:  382 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 84.09875170011053, 'MSE': 67.895, 'CXE': 16.203751700110534}
Epoch:  383 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 83.48475170011054, 'MSE': 67.281, 'CXE': 16.203751700110534}
Epoch:  384 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 82.87775170011054, 'MSE': 66.674, 'CXE': 16.203751700110534}
Epoch:  385 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 82.27975170011052, 'MSE': 66.076, 'CXE': 16.203751700110534}
Epoch:  386 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 81.69075170011052, 'MSE': 65.487, 'CXE': 16.203751700110534}
Epoch:  387 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 81.10875170011053, 'MSE': 64.905, 'CXE': 16.203751700110534}
Epoch:  388 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 80.53575170011052, 'MSE': 64.332, 'CXE': 16.203751700110534}
Epoch:  389 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 79.96975170011054, 'MSE': 63.766, 'CXE': 16.203751700110534}
Epoch:  390 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 79.41175170011053, 'MSE': 63.208, 'CXE': 16.203751700110534}
Epoch:  391 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 78.86175170011053, 'MSE': 62.658, 'CXE': 16.203751700110534}
Epoch:  392 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 78.31975170011053, 'MSE': 62.116, 'CXE': 16.203751700110534}
Epoch:  393 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 77.78375170011053, 'MSE': 61.58, 'CXE': 16.203751700110534}
Epoch:  394 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 77.25675170011053, 'MSE': 61.053, 'CXE': 16.203751700110534}
Epoch:  395 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 76.73575170011053, 'MSE': 60.532, 'CXE': 16.203751700110534}
Epoch:  396 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 76.22275170011054, 'MSE': 60.019, 'CXE': 16.203751700110534}
Epoch:  397 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 75.71675170011054, 'MSE': 59.513, 'CXE': 16.203751700110534}
Epoch:  398 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 75.21675170011054, 'MSE': 59.013, 'CXE': 16.203751700110534}
Epoch:  399 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 74.72475170011053, 'MSE': 58.521, 'CXE': 16.203751700110534}
Epoch:  400 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 74.23875170011053, 'MSE': 58.035, 'CXE': 16.203751700110534}
Epoch:  401 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 73.76075170011053, 'MSE': 57.557, 'CXE': 16.203751700110534}
Epoch:  402 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 73.28775170011053, 'MSE': 57.084, 'CXE': 16.203751700110534}
Epoch:  403 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 72.82175170011054, 'MSE': 56.618, 'CXE': 16.203751700110534}
Epoch:  404 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 72.36275170011054, 'MSE': 56.159, 'CXE': 16.203751700110534}
Epoch:  405 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 71.90975170011053, 'MSE': 55.706, 'CXE': 16.203751700110534}
Epoch:  406 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 71.46275170011053, 'MSE': 55.259, 'CXE': 16.203751700110534}
Epoch:  407 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 71.02175170011053, 'MSE': 54.818, 'CXE': 16.203751700110534}
Epoch:  408 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 70.58775170011053, 'MSE': 54.384, 'CXE': 16.203751700110534}
Epoch:  409 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 70.15875170011053, 'MSE': 53.955, 'CXE': 16.203751700110534}
Epoch:  410 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 69.73575170011053, 'MSE': 53.532, 'CXE': 16.203751700110534}
Epoch:  411 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 69.31875170011054, 'MSE': 53.115, 'CXE': 16.203751700110534}
Epoch:  412 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 68.90775170011054, 'MSE': 52.704, 'CXE': 16.203751700110534}
Epoch:  413 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 68.50175170011053, 'MSE': 52.298, 'CXE': 16.203751700110534}
Epoch:  414 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 68.10175170011054, 'MSE': 51.898, 'CXE': 16.203751700110534}
Epoch:  415 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 67.70775170011053, 'MSE': 51.504, 'CXE': 16.203751700110534}
Epoch:  416 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 67.31875170011054, 'MSE': 51.115, 'CXE': 16.203751700110534}
Epoch:  417 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 66.93475170011054, 'MSE': 50.731, 'CXE': 16.203751700110534}
Epoch:  418 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 66.55675170011054, 'MSE': 50.353, 'CXE': 16.203751700110534}
Epoch:  419 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 66.18275170011053, 'MSE': 49.979, 'CXE': 16.203751700110534}
Epoch:  420 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 65.81475170011053, 'MSE': 49.611, 'CXE': 16.203751700110534}
Epoch:  421 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 65.45175170011053, 'MSE': 49.248, 'CXE': 16.203751700110534}
Epoch:  422 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 65.09375170011053, 'MSE': 48.89, 'CXE': 16.203751700110534}
Epoch:  423 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 64.74075170011054, 'MSE': 48.537, 'CXE': 16.203751700110534}
Epoch:  424 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 64.39275170011054, 'MSE': 48.189, 'CXE': 16.203751700110534}
Epoch:  425 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 64.04875170011053, 'MSE': 47.845, 'CXE': 16.203751700110534}
Epoch:  426 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 63.710751700110535, 'MSE': 47.507, 'CXE': 16.203751700110534}
Epoch:  427 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 63.37575170011053, 'MSE': 47.172, 'CXE': 16.203751700110534}
Epoch:  428 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 63.04675170011053, 'MSE': 46.843, 'CXE': 16.203751700110534}
Epoch:  429 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 62.72175170011053, 'MSE': 46.518, 'CXE': 16.203751700110534}
Epoch:  430 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 62.40075170011053, 'MSE': 46.197, 'CXE': 16.203751700110534}
Epoch:  431 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 62.08475170011053, 'MSE': 45.881, 'CXE': 16.203751700110534}
Epoch:  432 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 61.77275170011053, 'MSE': 45.569, 'CXE': 16.203751700110534}
Epoch:  433 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 61.46575170011053, 'MSE': 45.262, 'CXE': 16.203751700110534}
Epoch:  434 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 61.16275170011053, 'MSE': 44.959, 'CXE': 16.203751700110534}
Epoch:  435 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 60.86375170011053, 'MSE': 44.66, 'CXE': 16.203751700110534}
Epoch:  436 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 60.56875170011054, 'MSE': 44.365, 'CXE': 16.203751700110534}
Epoch:  437 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 60.27775170011053, 'MSE': 44.074, 'CXE': 16.203751700110534}
Epoch:  438 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 59.990751700110536, 'MSE': 43.787, 'CXE': 16.203751700110534}
Epoch:  439 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 59.707751700110535, 'MSE': 43.504, 'CXE': 16.203751700110534}
Epoch:  440 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 59.42875170011054, 'MSE': 43.225, 'CXE': 16.203751700110534}
Epoch:  441 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 59.15275170011053, 'MSE': 42.949, 'CXE': 16.203751700110534}
Epoch:  442 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 58.88175170011053, 'MSE': 42.678, 'CXE': 16.203751700110534}
Epoch:  443 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 58.61375170011053, 'MSE': 42.41, 'CXE': 16.203751700110534}
Epoch:  444 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 58.34975170011053, 'MSE': 42.146, 'CXE': 16.203751700110534}
Epoch:  445 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 58.088751700110535, 'MSE': 41.885, 'CXE': 16.203751700110534}
Epoch:  446 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 57.83175170011053, 'MSE': 41.628, 'CXE': 16.203751700110534}
Epoch:  447 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 57.57875170011053, 'MSE': 41.375, 'CXE': 16.203751700110534}
Epoch:  448 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 57.32875170011053, 'MSE': 41.125, 'CXE': 16.203751700110534}
Epoch:  449 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 57.08175170011053, 'MSE': 40.878, 'CXE': 16.203751700110534}
Epoch:  450 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 56.838751700110535, 'MSE': 40.635, 'CXE': 16.203751700110534}
Epoch:  451 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 56.59975170011053, 'MSE': 40.396, 'CXE': 16.203751700110534}
Epoch:  452 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 56.362751700110536, 'MSE': 40.159, 'CXE': 16.203751700110534}
Epoch:  453 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 56.12975170011053, 'MSE': 39.926, 'CXE': 16.203751700110534}
Epoch:  454 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 55.89975170011053, 'MSE': 39.696, 'CXE': 16.203751700110534}
Epoch:  455 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 55.67275170011054, 'MSE': 39.469, 'CXE': 16.203751700110534}
Epoch:  456 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 55.448751700110535, 'MSE': 39.245, 'CXE': 16.203751700110534}
Epoch:  457 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 55.22775170011053, 'MSE': 39.024, 'CXE': 16.203751700110534}
Epoch:  458 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 55.01075170011053, 'MSE': 38.807, 'CXE': 16.203751700110534}
Epoch:  459 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 54.79575170011053, 'MSE': 38.592, 'CXE': 16.203751700110534}
Epoch:  460 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 54.58375170011054, 'MSE': 38.38, 'CXE': 16.203751700110534}
Epoch:  461 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 54.37475170011054, 'MSE': 38.171, 'CXE': 16.203751700110534}
Epoch:  462 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 54.16875170011053, 'MSE': 37.965, 'CXE': 16.203751700110534}
Epoch:  463 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 53.96575170011053, 'MSE': 37.762, 'CXE': 16.203751700110534}
Epoch:  464 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 53.76575170011053, 'MSE': 37.562, 'CXE': 16.203751700110534}
Epoch:  465 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 53.567751700110534, 'MSE': 37.364, 'CXE': 16.203751700110534}
Epoch:  466 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 53.37275170011053, 'MSE': 37.169, 'CXE': 16.203751700110534}
Epoch:  467 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 53.180751700110534, 'MSE': 36.977, 'CXE': 16.203751700110534}
Epoch:  468 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 52.990751700110536, 'MSE': 36.787, 'CXE': 16.203751700110534}
Epoch:  469 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 52.80375170011054, 'MSE': 36.6, 'CXE': 16.203751700110534}
Epoch:  470 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 52.618751700110536, 'MSE': 36.415, 'CXE': 16.203751700110534}
Epoch:  471 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 52.436751700110534, 'MSE': 36.233, 'CXE': 16.203751700110534}
Epoch:  472 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 52.25775170011053, 'MSE': 36.054, 'CXE': 16.203751700110534}
Epoch:  473 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 52.08075170011054, 'MSE': 35.877, 'CXE': 16.203751700110534}
Epoch:  474 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 51.90575170011053, 'MSE': 35.702, 'CXE': 16.203751700110534}
Epoch:  475 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 51.73375170011053, 'MSE': 35.53, 'CXE': 16.203751700110534}
Epoch:  476 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 51.56375170011053, 'MSE': 35.36, 'CXE': 16.203751700110534}
Epoch:  477 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 51.39575170011054, 'MSE': 35.192, 'CXE': 16.203751700110534}
Epoch:  478 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 51.23075170011053, 'MSE': 35.027, 'CXE': 16.203751700110534}
Epoch:  479 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 51.067751700110534, 'MSE': 34.864, 'CXE': 16.203751700110534}
Epoch:  480 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 50.90675170011053, 'MSE': 34.703, 'CXE': 16.203751700110534}
Epoch:  481 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 50.74875170011053, 'MSE': 34.545, 'CXE': 16.203751700110534}
Epoch:  482 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 50.591751700110535, 'MSE': 34.388, 'CXE': 16.203751700110534}
Epoch:  483 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 50.43775170011054, 'MSE': 34.234, 'CXE': 16.203751700110534}
Epoch:  484 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 50.28575170011054, 'MSE': 34.082, 'CXE': 16.203751700110534}
Epoch:  485 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 50.13575170011053, 'MSE': 33.932, 'CXE': 16.203751700110534}
Epoch:  486 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 49.987751700110536, 'MSE': 33.784, 'CXE': 16.203751700110534}
Epoch:  487 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 49.841751700110535, 'MSE': 33.638, 'CXE': 16.203751700110534}
Epoch:  488 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 49.69675170011054, 'MSE': 33.493, 'CXE': 16.203751700110534}
Epoch:  489 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 49.55475170011053, 'MSE': 33.351, 'CXE': 16.203751700110534}
Epoch:  490 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 49.41475170011053, 'MSE': 33.211, 'CXE': 16.203751700110534}
Epoch:  491 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 49.27675170011054, 'MSE': 33.073, 'CXE': 16.203751700110534}
Epoch:  492 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 49.14075170011053, 'MSE': 32.937, 'CXE': 16.203751700110534}
Epoch:  493 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 49.00575170011054, 'MSE': 32.802, 'CXE': 16.203751700110534}
Epoch:  494 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 48.87275170011053, 'MSE': 32.669, 'CXE': 16.203751700110534}
Epoch:  495 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 48.74275170011053, 'MSE': 32.539, 'CXE': 16.203751700110534}
Epoch:  496 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 48.612751700110536, 'MSE': 32.409, 'CXE': 16.203751700110534}
Epoch:  497 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 48.48575170011053, 'MSE': 32.282, 'CXE': 16.203751700110534}
Epoch:  498 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 48.36075170011053, 'MSE': 32.157, 'CXE': 16.203751700110534}
Epoch:  499 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 48.23675170011053, 'MSE': 32.033, 'CXE': 16.203751700110534}
Epoch:  500 -  {'Acc': 0.5308641975308642, 'CXE + MSE loss': 48.11475170011053, 'MSE': 31.911, 'CXE': 16.203751700110534}
In [109]:
plt.figure(figsize=(20, 8))
plt.suptitle("Homegrown Complex Model [CXE + MSE]")
#plt.subplot(121)
plt.plot(model_complex_homegrown.history["CXE + MSE train_loss"], label="Train")
plt.plot(model_complex_homegrown.history["CXE + MSE val_loss"], label="Test")
plt.legend(loc="upper left")
plt.xlabel("Iteration")
plt.ylabel("CXE + MSE");
plt.show()
In [88]:
plt.figure(figsize=(20, 8))
plt.suptitle("Homegrown Complex Logistic Regression")
#plt.subplot(121)
plt.plot(model_complex_homegrown.history["Train_acc_C"], label="Train")
plt.plot(model_complex_homegrown.history["Val_acc_C"], label="Test")
plt.legend(loc="upper left")
plt.xlabel("Iteration")
plt.ylabel("Accuracy");
plt.show()
In [112]:
model_complex_homegrown.history["Val_acc_C"][-1]
Out[112]:
0.6666666666666666
In [123]:
expLog = pd.DataFrame(columns=["exp_name", 
                               'Training Accuracy',
                               "Validation Accuracy", 
                               'Training CXE + MSE',
                               'Validation CSE + MSE'
                              ])
In [124]:
model_complex_homegrown.history["CXE + MSE train_loss"][-1]
Out[124]:
48.25675170011053
In [126]:
exp_name = f"Complex CXE + MSE Model"
expLog.loc[0,:5] = [f"{exp_name}"] + list(np.round(
               [model_complex_homegrown.history["Train_acc_C"][-1],
                model_complex_homegrown.history["Val_acc_C"][-1],
               model_complex_homegrown.history["CXE + MSE train_loss"][-1],
               model_complex_homegrown.history["CXE + MSE val_loss"][-1]],3))
expLog
Out[126]:
exp_name Training Accuracy Validation Accuracy Training CXE + MSE Validation CSE + MSE
0 Complex CXE + MSE Model 0.531 0.667 48.257 59.08
In [140]:
X_test_r.shape[1]
Out[140]:
49152
In [150]:
X_test_r = scaler.transform(X_test_r)
pred_r, pred_c = model_complex_homegrown.predict(X_test_r)
pred_r
Out[150]:
array([[6.66397148, 6.93303818, 7.75169448, 7.7727615 ],
       [7.9239856 , 7.93813868, 8.65015286, 8.65503666],
       [3.97905184, 3.90168209, 4.33780035, 4.58498425],
       [3.25865422, 3.08137857, 4.26940025, 3.92062164],
       [6.95694116, 7.23588345, 7.94755844, 8.168139  ],
       [4.45517755, 4.7228827 , 5.36427861, 5.28407983],
       [1.72216399, 1.50916462, 2.20084376, 2.45597898],
       [7.48413636, 7.64178922, 8.47286734, 8.26222221],
       [7.36742514, 7.49611543, 8.28534431, 8.32533193],
       [2.43199247, 2.67449724, 3.20942088, 3.39623651]])

Visualization

In [153]:
df = pd.read_csv('cadod.csv')
# plot random 6 images
fig, ax = plt.subplots(nrows=2, ncols=3, sharex=False, sharey=False,figsize=(15,10))
ax = ax.flatten()

for i,j in enumerate(np.random.choice(df.shape[0], size=6, replace=False)):
    img = mpimg.imread('images/resized/'+df.ImageID.values[j]+'.jpg')
    h, w = img.shape[:2]
    coords = pred_r[i]
    ax[i].imshow(img)
    
    ax[i].set_title("Ground Truth: {0} \n Prediction: {1} ".format(idx_to_label[y_test_c[i]],
                                                                   idx_to_label[np.round(pred_c[i])],),
                   color=("green" if np.round(pred_c[i]) == y_test_c[i] else "red"))
    
    
    
    ax[i].add_patch(plt.Rectangle((coords[0]*w, coords[2]*h), 
                                  coords[1]*w-coords[0]*w, coords[3]*h-coords[2]*h, 
                                  edgecolor='red', facecolor='none'))
    
    

plt.tight_layout()
plt.show()

Results and Discussion

image.png

EfficientDet

image.png

  • EfficientNet forms the backbone of the EfficientDet

  • Upon this bakbone, we add the BiFPN layer, which is the feature network layer

  • This layer combines representations of a given image at different resolutions.

  • We stack multiple BiFPN layer depending on the need

  • The final layer in this model is the Box/class Net layer

  • This is the output layer which predicts the class and the bounding labels in a single stage

Modeling Pipeline:

Preprocessing steps for EfficientDet:

  • We need to do the following before we feed the data into the efficient det model:

  • Create a .json file for train and validation data set which has data about image boundary box

  • Create a training and test folder which has images of cats and dogs

  • Create a .yml which has information about mean, std and anchor of the image

Training the EfficientDet:

  • We have used the already existing transfer learning efficientdet for classification and regression tasks

  • We trained only the head layer; we have used the learning rate 0.002 and have trained the model for 30 epochs

Metrics for evaluation:

  • Accuracy - the ratio of correction predictions to the total predictions

    • Accuracy = (True Cats + True Dogs) / (True Cats + False Cats + True Dogs + False Dogs)
  • MAP (Mean Average Precision) -

    • Precision is the ratio of true positives to all predicted positives

    • Precision = True positives / (True positives + False positives)

  • IoU – Intersection over Union

    • This gives the overlap between the true boundary and predicted boundary
  • Cross entropy loss function for classification and MSE for regression were used as loss function for the neural network

  • MSE – Evaluation parameter for regression

    • MSE – 1/n * sum (y – y_pred)^2

    • Y_pred – Predicted value of y

EfficientDet D0

In [ ]:
import numpy as np
from collections import Counter
import glob
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import os
from PIL import Image
from sklearn.exceptions import ConvergenceWarning
from sklearn.linear_model import SGDClassifier, SGDRegressor
from sklearn.metrics import accuracy_score, mean_squared_error, roc_auc_score
from sklearn.model_selection import train_test_split
import tarfile
from tqdm.notebook import tqdm
In [ ]:
 
In [1]:
!pip install pycocotools numpy==1.16.0 opencv-python tqdm tensorboard tensorboardX pyyaml webcolors matplotlib
!pip install torch==1.4.0
!pip install torchvision==0.5.0
Defaulting to user installation because normal site-packages is not writeable
Collecting pycocotools
  Downloading pycocotools-2.0.3.tar.gz (106 kB)
     |████████████████████████████████| 106 kB 7.6 MB/s eta 0:00:01
Collecting numpy==1.16.0
  Downloading numpy-1.16.0-cp37-cp37m-manylinux1_x86_64.whl (17.3 MB)
     |████████████████████████████████| 17.3 MB 21.0 MB/s eta 0:00:01
Collecting opencv-python
  Downloading opencv_python-4.5.4.60-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.3 MB)
     |████████████████████████████████| 60.3 MB 68.6 MB/s eta 0:00:01    |▋                               | 1.2 MB 23.6 MB/s eta 0:00:03     |█████████████████████████▍      | 47.7 MB 23.6 MB/s eta 0:00:01
Requirement already satisfied: tqdm in /usr/local/lib/python3.7/site-packages (4.62.1)
Requirement already satisfied: tensorboard in /usr/local/lib/python3.7/site-packages (2.6.0)
Collecting tensorboardX
  Downloading tensorboardX-2.4.1-py2.py3-none-any.whl (124 kB)
     |████████████████████████████████| 124 kB 35.5 MB/s eta 0:00:01
Requirement already satisfied: pyyaml in /usr/local/lib/python3.7/site-packages (5.4.1)
Collecting webcolors
  Downloading webcolors-1.11.1-py3-none-any.whl (9.9 kB)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/site-packages (3.4.2)
Requirement already satisfied: setuptools>=18.0 in /usr/local/lib/python3.7/site-packages (from pycocotools) (52.0.0.post20210125)
Requirement already satisfied: cython>=0.27.3 in /usr/local/lib/python3.7/site-packages (from pycocotools) (0.29.24)
Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.7/site-packages (from tensorboard) (2.25.1)
Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /usr/local/lib/python3.7/site-packages (from tensorboard) (0.6.1)
Requirement already satisfied: google-auth<2,>=1.6.3 in /usr/local/lib/python3.7/site-packages (from tensorboard) (1.35.0)
Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.7/site-packages (from tensorboard) (0.37.0)
Requirement already satisfied: protobuf>=3.6.0 in /usr/local/lib/python3.7/site-packages (from tensorboard) (3.17.3)
Requirement already satisfied: grpcio>=1.24.3 in /usr/local/lib/python3.7/site-packages (from tensorboard) (1.39.0)
Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.7/site-packages (from tensorboard) (0.13.0)
Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.7/site-packages (from tensorboard) (1.8.0)
Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.7/site-packages (from tensorboard) (2.0.1)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.7/site-packages (from tensorboard) (0.4.5)
Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.7/site-packages (from tensorboard) (3.3.4)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/site-packages (from matplotlib) (1.3.1)
Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.7/site-packages (from matplotlib) (8.3.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/site-packages (from matplotlib) (0.10.0)
Requirement already satisfied: pyparsing>=2.2.1 in /usr/local/lib/python3.7/site-packages (from matplotlib) (2.4.7)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.7/site-packages (from matplotlib) (2.8.2)
Requirement already satisfied: six in /usr/local/lib/python3.7/site-packages (from absl-py>=0.4->tensorboard) (1.15.0)
Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard) (4.7.2)
Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard) (4.2.2)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard) (0.2.8)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.7/site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard) (1.3.0)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/site-packages (from markdown>=2.6.8->tensorboard) (3.10.0)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/site-packages (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.3->tensorboard) (0.4.8)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard) (2021.5.30)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard) (2.10)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard) (1.26.6)
Requirement already satisfied: chardet<5,>=3.0.2 in /usr/local/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard) (4.0.0)
Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard) (3.1.1)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/site-packages (from importlib-metadata->markdown>=2.6.8->tensorboard) (3.5.0)
Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/site-packages (from importlib-metadata->markdown>=2.6.8->tensorboard) (3.7.4.3)
Building wheels for collected packages: pycocotools
  Building wheel for pycocotools (setup.py) ... done
  Created wheel for pycocotools: filename=pycocotools-2.0.3-cp37-cp37m-linux_x86_64.whl size=278868 sha256=2cbeeeafc5dfe65aea0150662164d4b3117518f6aa3b24eb02314c6e503da056
  Stored in directory: /N/home/u090/svtranga/Carbonate/.cache/pip/wheels/a2/09/4f/27f24df9927973a2dd820c3fb741c49d1208b25eb5331181c5
Successfully built pycocotools
Installing collected packages: numpy, webcolors, tensorboardX, pycocotools, opencv-python
  WARNING: The scripts f2py, f2py3 and f2py3.7 are installed in '/N/u/svtranga/Carbonate/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
tensorflow 2.6.0 requires numpy~=1.19.2, but you have numpy 1.16.0 which is incompatible.
sklearn-pandas 2.2.0 requires numpy>=1.18.1, but you have numpy 1.16.0 which is incompatible.
scipy 1.6.2 requires numpy<1.23.0,>=1.16.5, but you have numpy 1.16.0 which is incompatible.
scikit-image 0.18.1 requires numpy>=1.16.5, but you have numpy 1.16.0 which is incompatible.
pandas 1.3.2 requires numpy>=1.17.3, but you have numpy 1.16.0 which is incompatible.
Successfully installed numpy-1.16.0 opencv-python-4.5.4.60 pycocotools-2.0.3 tensorboardX-2.4.1 webcolors-1.11.1
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
Defaulting to user installation because normal site-packages is not writeable
Collecting torch==1.4.0
  Downloading torch-1.4.0-cp37-cp37m-manylinux1_x86_64.whl (753.4 MB)
     |████████████████████████████████| 753.4 MB 21 kB/s s eta 0:00:01   |▊                               | 17.1 MB 4.6 MB/s eta 0:02:41     |█████████▉                      | 231.6 MB 68.9 MB/s eta 0:00:08     |██████████▏                     | 238.8 MB 68.9 MB/s eta 0:00:08
Installing collected packages: torch
  WARNING: The scripts convert-caffe2-to-onnx and convert-onnx-to-caffe2 are installed in '/N/u/svtranga/Carbonate/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed torch-1.4.0
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
Defaulting to user installation because normal site-packages is not writeable
Collecting torchvision==0.5.0
  Downloading torchvision-0.5.0-cp37-cp37m-manylinux1_x86_64.whl (4.0 MB)
     |████████████████████████████████| 4.0 MB 6.0 MB/s eta 0:00:01     |██████████████▋                 | 1.8 MB 6.0 MB/s eta 0:00:01
Requirement already satisfied: numpy in /N/home/u090/svtranga/Carbonate/.local/lib/python3.7/site-packages (from torchvision==0.5.0) (1.16.0)
Requirement already satisfied: torch==1.4.0 in /N/home/u090/svtranga/Carbonate/.local/lib/python3.7/site-packages (from torchvision==0.5.0) (1.4.0)
Requirement already satisfied: six in /usr/local/lib/python3.7/site-packages (from torchvision==0.5.0) (1.15.0)
Requirement already satisfied: pillow>=4.1.1 in /usr/local/lib/python3.7/site-packages (from torchvision==0.5.0) (8.3.1)
Installing collected packages: torchvision
Successfully installed torchvision-0.5.0
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
In [1]:
import os
import sys
if "projects" not in os.getcwd():
    !git clone --depth 1 https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch
    os.chdir('Yet-Another-EfficientDet-Pytorch')
    sys.path.append('.')
else:
    !git pull
Cloning into 'Yet-Another-EfficientDet-Pytorch'...
remote: Enumerating objects: 47, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 47 (delta 3), reused 24 (delta 1), pack-reused 0
Receiving objects: 100% (47/47), 5.66 MiB | 11.88 MiB/s, done.
Resolving deltas: 100% (3/3), done.
In [66]:
# download pretrained weights
! mkdir weights
! wget https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/1.0/efficientdet-d0.pth -O weights/efficientdet-d0.pth
mkdir: cannot create directory 'weights': File exists
--2021-12-15 12:32:23--  https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/1.0/efficientdet-d0.pth
Resolving github.com (github.com)... 140.82.113.3
Connecting to github.com (github.com)|140.82.113.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/253385242/9b9d2100-791d-11ea-80b2-d35899cf95fe?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211215%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211215T173224Z&X-Amz-Expires=300&X-Amz-Signature=9f644f95a2a3fcb907b6024033a5a0d116d56a35bb23421a147155b5598580e3&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=253385242&response-content-disposition=attachment%3B%20filename%3Defficientdet-d0.pth&response-content-type=application%2Foctet-stream [following]
--2021-12-15 12:32:24--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/253385242/9b9d2100-791d-11ea-80b2-d35899cf95fe?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211215%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211215T173224Z&X-Amz-Expires=300&X-Amz-Signature=9f644f95a2a3fcb907b6024033a5a0d116d56a35bb23421a147155b5598580e3&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=253385242&response-content-disposition=attachment%3B%20filename%3Defficientdet-d0.pth&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.109.133, 185.199.111.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15862583 (15M) [application/octet-stream]
Saving to: 'weights/efficientdet-d0.pth'

weights/efficientde 100%[===================>]  15.13M  24.1MB/s    in 0.6s    

2021-12-15 12:32:25 (24.1 MB/s) - 'weights/efficientdet-d0.pth' saved [15862583/15862583]

In [8]:
!pip install pycocotools numpy==1.16.0 opencv-python tqdm tensorboard tensorboardX pyyaml webcolors matplotlib
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pycocotools in /N/home/u090/svtranga/Carbonate/.local/lib/python3.7/site-packages (2.0.3)
Requirement already satisfied: numpy==1.16.0 in /N/home/u090/svtranga/Carbonate/.local/lib/python3.7/site-packages (1.16.0)
Requirement already satisfied: opencv-python in /N/home/u090/svtranga/Carbonate/.local/lib/python3.7/site-packages (4.5.4.60)
Requirement already satisfied: tqdm in /usr/local/lib/python3.7/site-packages (4.62.1)
Requirement already satisfied: tensorboard in /usr/local/lib/python3.7/site-packages (2.6.0)
Requirement already satisfied: tensorboardX in /N/home/u090/svtranga/Carbonate/.local/lib/python3.7/site-packages (2.4.1)
Requirement already satisfied: pyyaml in /usr/local/lib/python3.7/site-packages (5.4.1)
Requirement already satisfied: webcolors in /N/home/u090/svtranga/Carbonate/.local/lib/python3.7/site-packages (1.11.1)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/site-packages (3.4.2)
Requirement already satisfied: setuptools>=18.0 in /usr/local/lib/python3.7/site-packages (from pycocotools) (52.0.0.post20210125)
Requirement already satisfied: cython>=0.27.3 in /usr/local/lib/python3.7/site-packages (from pycocotools) (0.29.24)
Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.7/site-packages (from tensorboard) (0.37.0)
Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.7/site-packages (from tensorboard) (2.25.1)
Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /usr/local/lib/python3.7/site-packages (from tensorboard) (0.6.1)
Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.7/site-packages (from tensorboard) (1.8.0)
Requirement already satisfied: protobuf>=3.6.0 in /usr/local/lib/python3.7/site-packages (from tensorboard) (3.17.3)
Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.7/site-packages (from tensorboard) (2.0.1)
Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.7/site-packages (from tensorboard) (0.13.0)
Requirement already satisfied: grpcio>=1.24.3 in /usr/local/lib/python3.7/site-packages (from tensorboard) (1.39.0)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.7/site-packages (from tensorboard) (0.4.5)
Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.7/site-packages (from tensorboard) (3.3.4)
Requirement already satisfied: google-auth<2,>=1.6.3 in /usr/local/lib/python3.7/site-packages (from tensorboard) (1.35.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/site-packages (from matplotlib) (1.3.1)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.7/site-packages (from matplotlib) (2.8.2)
Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.7/site-packages (from matplotlib) (8.3.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/site-packages (from matplotlib) (0.10.0)
Requirement already satisfied: pyparsing>=2.2.1 in /usr/local/lib/python3.7/site-packages (from matplotlib) (2.4.7)
Requirement already satisfied: six in /usr/local/lib/python3.7/site-packages (from absl-py>=0.4->tensorboard) (1.15.0)
Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard) (4.2.2)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard) (0.2.8)
Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard) (4.7.2)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.7/site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard) (1.3.0)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/site-packages (from markdown>=2.6.8->tensorboard) (3.10.0)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/site-packages (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.3->tensorboard) (0.4.8)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard) (1.26.6)
Requirement already satisfied: chardet<5,>=3.0.2 in /usr/local/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard) (4.0.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard) (2021.5.30)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard) (2.10)
Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard) (3.1.1)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/site-packages (from importlib-metadata->markdown>=2.6.8->tensorboard) (3.5.0)
Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/site-packages (from importlib-metadata->markdown>=2.6.8->tensorboard) (3.7.4.3)
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
In [3]:
print (np.__version__)
1.19.2
In [7]:
#Preparing dataset for efficientdet
import pandas as pd
df = pd.read_csv('cadod.csv')
df.LabelName.replace({'/m/01yrx':'cat', '/m/0bt9lr':'dog'}, inplace=True)
In [8]:
X = np.load('data/img.npy', allow_pickle=True)
y_label = np.load('data/y_label.npy', allow_pickle=True)
y_bbox = np.load('data/y_bbox.npy', allow_pickle=True)
In [9]:
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test_label = train_test_split(df, y_label, test_size=0.2, shuffle=True, stratify=y_label , random_state=27)
In [10]:
X_train['LabelName'].value_counts()
Out[10]:
dog    5484
cat    4888
Name: LabelName, dtype: int64
In [11]:
X_test['LabelName'].value_counts()
Out[11]:
dog    1371
cat    1223
Name: LabelName, dtype: int64
In [57]:
import os

if not os.path.exists('datasets'):
    os.mkdir('datasets')
    os.mkdir('datasets/cadod')
    os.mkdir('datasets/cadod/train')
    os.mkdir('datasets/cadod/val')
    os.mkdir('datasets/cadod/annotations')
In [58]:
import json

train_json = val_json = {
  "info": {
    "description": "cadod dataset",

  },
  "licenses": [
    {
      "id": 1,
      "name": 'null',
      "url": 'null'
    }
  ],
  "categories": [
    {
      "id": 1,
      "name": "cat",
      "supercategory": "NA"
    },
    {
      "id": 2,
      "name": "dog",
      "supercategory": "NA"
    }
  ]
}

def category(j,img_name,class_label,bbox):
    img_data = {"id": j,
          "file_name": img_name,
          "width": 128,
          "height": 128,
          "date_captured": "2021-12-14 01:45:18.567975",
          "license": 1,
          "cadod_url": "",
          "flickr_url": ""}
    

    annotations_data = {
      "id": j,
      "image_id": j,
      "category_id": class_label,
      "iscrowd": 0,
      "area": math.floor(bbox[2]*bbox[3]*128*128),
      "bbox": [
        math.floor(bbox[0]*128),
        math.floor(bbox[1]*128),
        math.floor(bbox[2]*128),
        math.floor(bbox[3]*128)
      ]
    }
    return img_data, annotations_data

Using only 1500 images for training and 500 for validation

Creating Training Set

In [59]:
from shutil import copyfile, copy, copy2
import math
images = []
annotation = []
j = 0
count_c = 0
count_d = 0
for i in tqdm(X_train.iterrows()):
    
    bbox = []
    img_name = i[1]['ImageID'] + '.jpg'
    class_name = i[1]['LabelName']
    bbox.append(i[1]['XMin'])
    bbox.append(i[1]['YMin'])
    bbox.append(abs(i[1]['XMin']-i[1]['XMax']))
    bbox.append(abs(i[1]['YMin']-i[1]['YMax']))
    if class_name == 'dog'and count_d < 750:
        image_data,annotations_data = category(j,img_name,2,bbox)
        images.append(image_data)
        annotation.append(annotations_data)
        copyfile(src='images/resized/'+img_name, dst='datasets/cadod/train/'+img_name)
        count_d +=1
    elif class_name == 'cat'and count_c < 750:
        image_data,annotations_data = category(j,img_name,1,bbox)
        images.append(image_data)
        annotation.append(annotations_data)
        copyfile(src='images/resized/'+img_name, dst='datasets/cadod/train/'+img_name)
        count_c +=1
    j+=1
    
train_json['images'] = images
train_json['annotations'] = annotation

with open('datasets/cadod/annotations/instances_train.json', 'w') as json_file:
    json.dump(train_json, json_file,indent = 4)

Creating validation set

In [60]:
images = []
annotation = []
j = 0
count_c = 0
count_d = 0
for i in tqdm(X_test.iterrows()):
    bbox = []
    img_name = i[1]['ImageID'] + '.jpg'
    class_name = i[1]['LabelName']
    bbox.append(i[1]['XMin'])
    bbox.append(i[1]['YMin'])
    bbox.append(abs(i[1]['XMin']-i[1]['XMax']))
    bbox.append(abs(i[1]['YMin']-i[1]['YMax']))
    if class_name == 'dog' and count_d<250:
        image_data,annotations_data = category(j,img_name,2,bbox)
        images.append(image_data)
        annotation.append(annotations_data)
        copyfile(src='images/resized/'+img_name, dst='datasets/cadod/val/'+img_name)
        count_d +=1
    elif class_name == 'cat' and count_c<250:
        image_data,annotations_data = category(j,img_name,1,bbox)
        images.append(image_data)
        annotation.append(annotations_data)
        copyfile(src='images/resized/'+img_name, dst='datasets/cadod/val/'+img_name)
        count_c +=1
    j+=1
    
val_json['images'] = images
val_json['annotations'] = annotation

with open('datasets/cadod/annotations/instances_val.json', 'w') as json_file:
    json.dump(val_json, json_file,indent = 4)
In [61]:
import os, os.path

root = 'datasets/cadod/train/'
print("# of images in train folder:",len([x for x in os.listdir(root) if os.path.isfile(os.path.join(root, x))]))

root = 'datasets/cadod/val/'
print("# of images in val folder:",len([x for x in os.listdir(root) if os.path.isfile(os.path.join(root, x))]))
# of images in train folder: 1500
# of images in val folder: 500
In [64]:
!cat cadod.yml
project_name: cadod  # also the folder name of the dataset that under data_path folder
train_set: train
val_set: val
num_gpus: 3

# mean and std in RGB order, actually this part should remain unchanged as long as your dataset is similar to coco.
mean: [ 0.485, 0.456, 0.406 ]
std: [ 0.229, 0.224, 0.225 ]

# this anchor is adapted to the dataset
anchors_scales: '[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]'
anchors_ratios: '[(1, 1.1), (1.3, 1.1), (1.1, 1.3)]'

obj_list: [ 'cat', 'dog' ]
In [53]:
#pip install opencv-python-headless
In [2]:
! python Yet-Another-EfficientDet-Pytorch/train.py -c 0 -p cadod --head_only True --lr 0.0002 --batch_size 32 --load_weights weights/efficientdet-d0.pth  --num_epochs 30 --save_interval 150
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
loading annotations into memory...
Done (t=0.00s)
creating index...
index created!
[Warning] Ignoring Error(s) in loading state_dict for EfficientDetBackbone:
	size mismatch for classifier.header.pointwise_conv.conv.weight: copying a param with shape torch.Size([810, 64, 1, 1]) from checkpoint, the shape in current model is torch.Size([18, 64, 1, 1]).
	size mismatch for classifier.header.pointwise_conv.conv.bias: copying a param with shape torch.Size([810]) from checkpoint, the shape in current model is torch.Size([18]).
[Warning] Don't panic if you see this, this might be because you load a pretrained weights with different number of classes. The rest of the weights should be loaded already.
[Info] loaded weights: efficientdet-d0.pth, resuming checkpoint from step: 0
[Info] freezed backbone
Step: 45. Epoch: 0/30. Iteration: 46/46. Cls loss: 473.79065. Reg loss: 2.52184.
Val. Epoch: 0/30. Classification loss: 402.11689. Regression loss: 1.87817. Total loss: 403.99506
Step: 91. Epoch: 1/30. Iteration: 46/46. Cls loss: 213.06703. Reg loss: 2.42287.
Val. Epoch: 1/30. Classification loss: 185.78141. Regression loss: 1.54669. Total loss: 187.32810
Step: 137. Epoch: 2/30. Iteration: 46/46. Cls loss: 105.38835. Reg loss: 2.30939
Val. Epoch: 2/30. Classification loss: 93.54522. Regression loss: 1.52011. Total loss: 95.06533
Step: 149. Epoch: 3/30. Iteration: 12/46. Cls loss: 86.40145. Reg loss: 2.07007.checkpoint...
Step: 183. Epoch: 3/30. Iteration: 46/46. Cls loss: 42.00037. Reg loss: 1.71960.
Val. Epoch: 3/30. Classification loss: 42.17530. Regression loss: 1.56060. Total loss: 43.73591
Step: 229. Epoch: 4/30. Iteration: 46/46. Cls loss: 21.15230. Reg loss: 1.70571.
Val. Epoch: 4/30. Classification loss: 23.12656. Regression loss: 1.58982. Total loss: 24.71637
Step: 275. Epoch: 5/30. Iteration: 46/46. Cls loss: 15.56464. Reg loss: 2.03133.
Val. Epoch: 5/30. Classification loss: 15.52779. Regression loss: 1.62986. Total loss: 17.15765
Step: 299. Epoch: 6/30. Iteration: 24/46. Cls loss: 12.01935. Reg loss: 1.70482.checkpoint...
Step: 321. Epoch: 6/30. Iteration: 46/46. Cls loss: 9.60723. Reg loss: 1.60787. 
Val. Epoch: 6/30. Classification loss: 11.12321. Regression loss: 1.65599. Total loss: 12.77919
Step: 367. Epoch: 7/30. Iteration: 46/46. Cls loss: 7.43679. Reg loss: 2.10839. 
Val. Epoch: 7/30. Classification loss: 8.39100. Regression loss: 1.66537. Total loss: 10.05637
Step: 413. Epoch: 8/30. Iteration: 46/46. Cls loss: 5.84448. Reg loss: 1.72255. 
Val. Epoch: 8/30. Classification loss: 6.62713. Regression loss: 1.64943. Total loss: 8.27656
Step: 449. Epoch: 9/30. Iteration: 36/46. Cls loss: 4.86198. Reg loss: 1.65264. checkpoint...
Step: 459. Epoch: 9/30. Iteration: 46/46. Cls loss: 5.11414. Reg loss: 1.70895. 
Val. Epoch: 9/30. Classification loss: 5.38319. Regression loss: 1.63863. Total loss: 7.02182
Step: 505. Epoch: 10/30. Iteration: 46/46. Cls loss: 3.99704. Reg loss: 1.41419.
Val. Epoch: 10/30. Classification loss: 4.47575. Regression loss: 1.64468. Total loss: 6.12043
Step: 551. Epoch: 11/30. Iteration: 46/46. Cls loss: 3.52052. Reg loss: 1.67461.
Val. Epoch: 11/30. Classification loss: 3.82339. Regression loss: 1.62573. Total loss: 5.44912
Step: 597. Epoch: 12/30. Iteration: 46/46. Cls loss: 3.02296. Reg loss: 1.88055.
Val. Epoch: 12/30. Classification loss: 3.29484. Regression loss: 1.61441. Total loss: 4.90925
Step: 599. Epoch: 13/30. Iteration: 2/46. Cls loss: 3.06107. Reg loss: 1.75457. checkpoint...
Step: 643. Epoch: 13/30. Iteration: 46/46. Cls loss: 2.62116. Reg loss: 1.97248.
Val. Epoch: 13/30. Classification loss: 2.88875. Regression loss: 1.62246. Total loss: 4.51120
Step: 689. Epoch: 14/30. Iteration: 46/46. Cls loss: 2.71462. Reg loss: 1.60584.
Val. Epoch: 14/30. Classification loss: 2.56212. Regression loss: 1.59942. Total loss: 4.16154
Step: 735. Epoch: 15/30. Iteration: 46/46. Cls loss: 2.30788. Reg loss: 2.09758.
Val. Epoch: 15/30. Classification loss: 2.30067. Regression loss: 1.59234. Total loss: 3.89301
Step: 749. Epoch: 16/30. Iteration: 14/46. Cls loss: 2.33792. Reg loss: 1.71018.checkpoint...
Step: 781. Epoch: 16/30. Iteration: 46/46. Cls loss: 1.89108. Reg loss: 1.72813.
Val. Epoch: 16/30. Classification loss: 2.07532. Regression loss: 1.59188. Total loss: 3.66721
Step: 827. Epoch: 17/30. Iteration: 46/46. Cls loss: 1.91120. Reg loss: 1.62235.
Val. Epoch: 17/30. Classification loss: 1.89626. Regression loss: 1.59284. Total loss: 3.48910
Step: 873. Epoch: 18/30. Iteration: 46/46. Cls loss: 1.73765. Reg loss: 1.34530.
Val. Epoch: 18/30. Classification loss: 1.74132. Regression loss: 1.62266. Total loss: 3.36399
Step: 899. Epoch: 19/30. Iteration: 26/46. Cls loss: 1.52939. Reg loss: 1.65990.checkpoint...
Step: 919. Epoch: 19/30. Iteration: 46/46. Cls loss: 1.58380. Reg loss: 1.81458.
Val. Epoch: 19/30. Classification loss: 1.59768. Regression loss: 1.57496. Total loss: 3.17263
Step: 965. Epoch: 20/30. Iteration: 46/46. Cls loss: 1.41967. Reg loss: 1.41363.
Val. Epoch: 20/30. Classification loss: 1.47666. Regression loss: 1.57296. Total loss: 3.04963
Step: 1011. Epoch: 21/30. Iteration: 46/46. Cls loss: 1.36505. Reg loss: 1.68182
Val. Epoch: 21/30. Classification loss: 1.37638. Regression loss: 1.56067. Total loss: 2.93705
Step: 1049. Epoch: 22/30. Iteration: 38/46. Cls loss: 1.17924. Reg loss: 1.41707checkpoint...
Step: 1057. Epoch: 22/30. Iteration: 46/46. Cls loss: 1.19627. Reg loss: 1.38967
Val. Epoch: 22/30. Classification loss: 1.28814. Regression loss: 1.56388. Total loss: 2.85202
Step: 1103. Epoch: 23/30. Iteration: 46/46. Cls loss: 1.11670. Reg loss: 1.47585
Val. Epoch: 23/30. Classification loss: 1.20680. Regression loss: 1.57386. Total loss: 2.78066
Step: 1149. Epoch: 24/30. Iteration: 46/46. Cls loss: 1.12763. Reg loss: 1.53919
Val. Epoch: 24/30. Classification loss: 1.13170. Regression loss: 1.54756. Total loss: 2.67926
Step: 1195. Epoch: 25/30. Iteration: 46/46. Cls loss: 1.06963. Reg loss: 1.72191
Val. Epoch: 25/30. Classification loss: 1.07071. Regression loss: 1.54997. Total loss: 2.62068
Step: 1199. Epoch: 26/30. Iteration: 4/46. Cls loss: 1.01824. Reg loss: 1.58501.checkpoint...
Step: 1241. Epoch: 26/30. Iteration: 46/46. Cls loss: 1.01979. Reg loss: 1.85881
Val. Epoch: 26/30. Classification loss: 1.01739. Regression loss: 1.54739. Total loss: 2.56478
Step: 1287. Epoch: 27/30. Iteration: 46/46. Cls loss: 0.96879. Reg loss: 1.60213
Val. Epoch: 27/30. Classification loss: 0.96823. Regression loss: 1.57035. Total loss: 2.53858
Step: 1333. Epoch: 28/30. Iteration: 46/46. Cls loss: 0.83845. Reg loss: 1.11208
Val. Epoch: 28/30. Classification loss: 0.92303. Regression loss: 1.55778. Total loss: 2.48081
Step: 1349. Epoch: 29/30. Iteration: 16/46. Cls loss: 0.87448. Reg loss: 1.61470checkpoint...
Step: 1379. Epoch: 29/30. Iteration: 46/46. Cls loss: 0.88262. Reg loss: 1.80324
Val. Epoch: 29/30. Classification loss: 0.87853. Regression loss: 1.54074. Total loss: 2.41927
In [16]:
%cd logs/cadod
weight_file = !ls -Art | grep efficientdet
%cd ../..
/N/home/u090/svtranga/Carbonate/Downloads/logs/cadod
/N/home/u090/svtranga/Carbonate/Downloads
In [21]:
#uncomment the next line to specify a weight file
weight_file[-1] = 'efficientdet-d0_29_final.pth'

! python Yet-Another-EfficientDet-Pytorch/coco_eval.py -c 0 -p cadod -w "logs/cadod/{weight_file[-1]}"
running coco-style evaluation on project cadod, weights logs/cadod/efficientdet-d0_29_final.pth...
loading annotations into memory...
Done (t=0.02s)
creating index...
index created!
100%|█████████████████████████████████████████| 500/500 [50:01<00:00,  6.00s/it]
Loading and preparing results...
DONE (t=31.38s)
creating index...
index created!
BBox
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=13.59s).
Accumulating evaluation results...
DONE (t=0.73s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.171
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.348
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.137
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.125
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.281
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.551
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.597
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.608
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.526
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.637

Visualize the results

In [14]:
# Author: Zylo117

import torch
from torch import nn

from efficientdet.model import BiFPN, Regressor, Classifier, EfficientNet
from efficientdet.utils import Anchors


class EfficientDetBackbone(nn.Module):
    def __init__(self, num_classes=80, compound_coef=0, load_weights=False, **kwargs):
        super(EfficientDetBackbone, self).__init__()
        self.compound_coef = compound_coef

        self.backbone_compound_coef = [0, 1, 2, 3, 4, 5, 6, 6, 7]
        self.fpn_num_filters = [64, 88, 112, 160, 224, 288, 384, 384, 384]
        self.fpn_cell_repeats = [3, 4, 5, 6, 7, 7, 8, 8, 8]
        self.input_sizes = [512, 640, 768, 896, 1024, 1280, 1280, 1536, 1536]
        self.box_class_repeats = [3, 3, 3, 4, 4, 4, 5, 5, 5]
        self.pyramid_levels = [5, 5, 5, 5, 5, 5, 5, 5, 6]
        self.anchor_scale = [4., 4., 4., 4., 4., 4., 4., 5., 4.]
        self.aspect_ratios = kwargs.get('ratios', [(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)])
        self.num_scales = len(kwargs.get('scales', [2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]))
        conv_channel_coef = {
            # the channels of P3/P4/P5.
            0: [40, 112, 320],
            1: [40, 112, 320],
            2: [48, 120, 352],
            3: [48, 136, 384],
            4: [56, 160, 448],
            5: [64, 176, 512],
            6: [72, 200, 576],
            7: [72, 200, 576],
            8: [80, 224, 640],
        }

        num_anchors = len(self.aspect_ratios) * self.num_scales

        self.bifpn = nn.Sequential(
            *[BiFPN(self.fpn_num_filters[self.compound_coef],
                    conv_channel_coef[compound_coef],
                    True if _ == 0 else False,
                    attention=True if compound_coef < 6 else False,
                    use_p8=compound_coef > 7)
              for _ in range(self.fpn_cell_repeats[compound_coef])])

        self.num_classes = num_classes
        self.regressor = Regressor(in_channels=self.fpn_num_filters[self.compound_coef], num_anchors=num_anchors,
                                   num_layers=self.box_class_repeats[self.compound_coef],
                                   pyramid_levels=self.pyramid_levels[self.compound_coef])
        self.classifier = Classifier(in_channels=self.fpn_num_filters[self.compound_coef], num_anchors=num_anchors,
                                     num_classes=num_classes,
                                     num_layers=self.box_class_repeats[self.compound_coef],
                                     pyramid_levels=self.pyramid_levels[self.compound_coef])

        self.anchors = Anchors(anchor_scale=self.anchor_scale[compound_coef],
                               pyramid_levels=(torch.arange(self.pyramid_levels[self.compound_coef]) + 3).tolist(),
                               **kwargs)

        self.backbone_net = EfficientNet(self.backbone_compound_coef[compound_coef], load_weights)

    def freeze_bn(self):
        for m in self.modules():
            if isinstance(m, nn.BatchNorm2d):
                m.eval()

    def forward(self, inputs):
        max_size = inputs.shape[-1]

        _, p3, p4, p5 = self.backbone_net(inputs)

        features = (p3, p4, p5)
        features = self.bifpn(features)

        regression = self.regressor(features)
        classification = self.classifier(features)
        anchors = self.anchors(inputs, inputs.dtype)

        return features, regression, classification, anchors

    def init_backbone(self, path):
        state_dict = torch.load(path)
        try:
            ret = self.load_state_dict(state_dict, strict=False)
            print(ret)
        except RuntimeError as e:
            print('Ignoring ' + str(e) + '"')
In [22]:
import torch
from torch.backends import cudnn

#from backbone import EfficientDetBackbone
import cv2
import matplotlib.pyplot as plt
import numpy as np

from efficientdet.utils import BBoxTransform, ClipBoxes
from utils.utils import preprocess, invert_affine, postprocess

compound_coef = 0
force_input_size = None  # set None to use default size
img_path = 'datasets/cadod/val/00e4d41ec48a1d17.jpg'

threshold = 0.2
iou_threshold = 0.2

use_cuda = True
use_float16 = False
cudnn.fastest = True
cudnn.benchmark = True

obj_list = [ 'cat', 'dog' ]

# tf bilinear interpolation is different from any other's, just make do
input_sizes = [512, 640, 768, 896, 1024, 1280, 1280, 1536]
input_size = input_sizes[compound_coef] if force_input_size is None else force_input_size
ori_imgs, framed_imgs, framed_metas = preprocess(img_path, max_size=input_size)

# if use_cuda:
#     x = torch.stack([torch.from_numpy(fi).cuda() for fi in framed_imgs], 0)
# else:
x = torch.stack([torch.from_numpy(fi) for fi in framed_imgs], 0)

x = x.to(torch.float32 if not use_float16 else torch.float16).permute(0, 3, 1, 2)

model = EfficientDetBackbone(compound_coef=compound_coef, num_classes=len(obj_list),

                             # replace this part with your project's anchor config
                             ratios=[(0.7, 1.4), (1.0, 1.0), (1.5, 0.7)],
                             scales=[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)])

model.load_state_dict(torch.load('logs/cadod/'+weight_file[-1]))
model.requires_grad_(False)
model.eval()

# if use_cuda:
#     model = model.cuda()
if use_float16:
    model = model.half()

with torch.no_grad():
    features, regression, classification, anchors = model(x)

    regressBoxes = BBoxTransform()
    clipBoxes = ClipBoxes()

    out = postprocess(x,
                      anchors, regression, classification,
                      regressBoxes, clipBoxes,
                      threshold, iou_threshold)

out = invert_affine(framed_metas, out)

for i in range(len(ori_imgs)):
    if len(out[i]['rois']) == 0:
        continue
    ori_imgs[i] = ori_imgs[i].copy()
    for j in range(len(out[i]['rois'])):
        (x1, y1, x2, y2) = out[i]['rois'][j].astype(np.int)
        cv2.rectangle(ori_imgs[i], (x1, y1), (x2, y2), (255, 255, 0), 2)
        obj = obj_list[out[i]['class_ids'][j]]
        score = float(out[i]['scores'][j])

        cv2.putText(ori_imgs[i], '{}, {:.3f}'.format(obj, score),
                    (x1, y1 + 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                    (255, 255, 0), 1)

        plt.imshow(ori_imgs[i]);
        #plt.show()
In [ ]:
 
In [ ]:
 

EfficientDet D1

In [1]:
import numpy as np
from collections import Counter
import glob
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import os
from PIL import Image
from sklearn.exceptions import ConvergenceWarning
from sklearn.linear_model import SGDClassifier, SGDRegressor
from sklearn.metrics import accuracy_score, mean_squared_error, roc_auc_score
from sklearn.model_selection import train_test_split
import tarfile
from tqdm.notebook import tqdm
In [2]:
# download pretrained weights
#! mkdir weights
! wget https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/1.0/efficientdet-d1.pth -O weights/efficientdet-d1.pth
--2021-12-15 13:49:34--  https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/1.0/efficientdet-d1.pth
Resolving github.com (github.com)... 140.82.113.3
Connecting to github.com (github.com)|140.82.113.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/253385242/44e41700-791e-11ea-94c5-3d69afce13e8?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211215%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211215T184934Z&X-Amz-Expires=300&X-Amz-Signature=fd56193406664576b9a0b3ff385ddb4a8ff9b630997e1da327768696ad2ac3a2&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=253385242&response-content-disposition=attachment%3B%20filename%3Defficientdet-d1.pth&response-content-type=application%2Foctet-stream [following]
--2021-12-15 13:49:34--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/253385242/44e41700-791e-11ea-94c5-3d69afce13e8?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211215%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211215T184934Z&X-Amz-Expires=300&X-Amz-Signature=fd56193406664576b9a0b3ff385ddb4a8ff9b630997e1da327768696ad2ac3a2&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=253385242&response-content-disposition=attachment%3B%20filename%3Defficientdet-d1.pth&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 26989269 (26M) [application/octet-stream]
Saving to: 'weights/efficientdet-d1.pth'

weights/efficientde 100%[===================>]  25.74M  18.3MB/s    in 1.4s    

2021-12-15 13:49:36 (18.3 MB/s) - 'weights/efficientdet-d1.pth' saved [26989269/26989269]

In [3]:
!cat cadod.yml
project_name: cadod  # also the folder name of the dataset that under data_path folder
train_set: train
val_set: val
num_gpus: 3

# mean and std in RGB order, actually this part should remain unchanged as long as your dataset is similar to coco.
mean: [ 0.485, 0.456, 0.406 ]
std: [ 0.229, 0.224, 0.225 ]

# this anchor is adapted to the dataset
anchors_scales: '[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]'
anchors_ratios: '[(1, 1.1), (1.3, 1.1), (1.1, 1.3)]'

obj_list: [ 'cat', 'dog' ]
In [53]:
#pip install opencv-python-headless
In [4]:
! python Yet-Another-EfficientDet-Pytorch/train.py -c 0 -p cadod --head_only True --lr 0.0002 --batch_size 32 --load_weights weights/efficientdet-d1.pth  --num_epochs 30 --save_interval 150
loading annotations into memory...
Done (t=0.03s)
creating index...
index created!
loading annotations into memory...
Done (t=0.02s)
creating index...
index created!
[Warning] Ignoring Error(s) in loading state_dict for EfficientDetBackbone:
	size mismatch for bifpn.0.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.0.conv.weight: copying a param with shape torch.Size([88, 320, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_down_channel.0.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.0.conv.weight: copying a param with shape torch.Size([88, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 112, 1, 1]).
	size mismatch for bifpn.0.p4_down_channel.0.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.0.conv.weight: copying a param with shape torch.Size([88, 40, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 40, 1, 1]).
	size mismatch for bifpn.0.p3_down_channel.0.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.0.conv.weight: copying a param with shape torch.Size([88, 320, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_to_p6.0.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.0.conv.weight: copying a param with shape torch.Size([88, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 112, 1, 1]).
	size mismatch for bifpn.0.p4_down_channel_2.0.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.0.conv.weight: copying a param with shape torch.Size([88, 320, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_down_channel_2.0.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.0.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.0.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.0.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.1.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.1.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.1.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.2.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.2.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.2.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.header.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.header.pointwise_conv.conv.weight: copying a param with shape torch.Size([36, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([36, 64, 1, 1]).
	size mismatch for classifier.conv_list.0.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.0.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.0.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.conv_list.1.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.1.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.1.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.conv_list.2.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.2.pointwise_conv.conv.weight: copying a param with shape torch.Size([88, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.2.pointwise_conv.conv.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.header.depthwise_conv.conv.weight: copying a param with shape torch.Size([88, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.header.pointwise_conv.conv.weight: copying a param with shape torch.Size([810, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([18, 64, 1, 1]).
	size mismatch for classifier.header.pointwise_conv.conv.bias: copying a param with shape torch.Size([810]) from checkpoint, the shape in current model is torch.Size([18]).
	size mismatch for backbone_net.model._blocks.1._depthwise_conv.conv.weight: copying a param with shape torch.Size([16, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.1._bn1.weight: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.bias: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.running_mean: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.running_var: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._se_reduce.conv.weight: copying a param with shape torch.Size([4, 16, 1, 1]) from checkpoint, the shape in current model is torch.Size([4, 96, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._se_expand.conv.weight: copying a param with shape torch.Size([16, 4, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 4, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._se_expand.conv.bias: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._project_conv.conv.weight: copying a param with shape torch.Size([16, 16, 1, 1]) from checkpoint, the shape in current model is torch.Size([24, 96, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._bn2.weight: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.bias: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.running_mean: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.running_var: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.2._expand_conv.conv.weight: copying a param with shape torch.Size([96, 16, 1, 1]) from checkpoint, the shape in current model is torch.Size([144, 24, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._bn0.weight: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn0.bias: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn0.running_mean: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn0.running_var: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._depthwise_conv.conv.weight: copying a param with shape torch.Size([96, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([144, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.2._bn1.weight: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.bias: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.running_mean: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.running_var: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._se_reduce.conv.weight: copying a param with shape torch.Size([4, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([6, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._se_reduce.conv.bias: copying a param with shape torch.Size([4]) from checkpoint, the shape in current model is torch.Size([6]).
	size mismatch for backbone_net.model._blocks.2._se_expand.conv.weight: copying a param with shape torch.Size([96, 4, 1, 1]) from checkpoint, the shape in current model is torch.Size([144, 6, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._se_expand.conv.bias: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._project_conv.conv.weight: copying a param with shape torch.Size([24, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([24, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.3._depthwise_conv.conv.weight: copying a param with shape torch.Size([144, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([144, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.3._project_conv.conv.weight: copying a param with shape torch.Size([24, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([40, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.3._bn2.weight: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.3._bn2.bias: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.3._bn2.running_mean: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.3._bn2.running_var: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.4._expand_conv.conv.weight: copying a param with shape torch.Size([144, 24, 1, 1]) from checkpoint, the shape in current model is torch.Size([240, 40, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._bn0.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn0.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn0.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn0.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._depthwise_conv.conv.weight: copying a param with shape torch.Size([144, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([240, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.4._bn1.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn1.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn1.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn1.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._se_reduce.conv.weight: copying a param with shape torch.Size([6, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([10, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._se_reduce.conv.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([10]).
	size mismatch for backbone_net.model._blocks.4._se_expand.conv.weight: copying a param with shape torch.Size([144, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([240, 10, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._se_expand.conv.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._project_conv.conv.weight: copying a param with shape torch.Size([24, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([40, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._bn2.weight: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.4._bn2.bias: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.4._bn2.running_mean: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.4._bn2.running_var: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.5._expand_conv.conv.weight: copying a param with shape torch.Size([144, 24, 1, 1]) from checkpoint, the shape in current model is torch.Size([240, 40, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._bn0.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn0.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn0.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn0.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._depthwise_conv.conv.weight: copying a param with shape torch.Size([144, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([240, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.5._bn1.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn1.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn1.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn1.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._se_reduce.conv.weight: copying a param with shape torch.Size([6, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([10, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._se_reduce.conv.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([10]).
	size mismatch for backbone_net.model._blocks.5._se_expand.conv.weight: copying a param with shape torch.Size([144, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([240, 10, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._se_expand.conv.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._project_conv.conv.weight: copying a param with shape torch.Size([40, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._bn2.weight: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.bias: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.running_mean: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.running_var: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._expand_conv.conv.weight: copying a param with shape torch.Size([240, 40, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._bn0.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._depthwise_conv.conv.weight: copying a param with shape torch.Size([240, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([480, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.6._bn1.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._se_reduce.conv.weight: copying a param with shape torch.Size([10, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._se_reduce.conv.bias: copying a param with shape torch.Size([10]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.6._se_expand.conv.weight: copying a param with shape torch.Size([240, 10, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._se_expand.conv.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._project_conv.conv.weight: copying a param with shape torch.Size([40, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._bn2.weight: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.bias: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.running_mean: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.running_var: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._expand_conv.conv.weight: copying a param with shape torch.Size([240, 40, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._bn0.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._depthwise_conv.conv.weight: copying a param with shape torch.Size([240, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([480, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.7._bn1.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._se_reduce.conv.weight: copying a param with shape torch.Size([10, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._se_reduce.conv.bias: copying a param with shape torch.Size([10]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.7._se_expand.conv.weight: copying a param with shape torch.Size([240, 10, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._se_expand.conv.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._project_conv.conv.weight: copying a param with shape torch.Size([40, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._bn2.weight: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.bias: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.running_mean: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.running_var: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.8._expand_conv.conv.weight: copying a param with shape torch.Size([240, 40, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._bn0.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._depthwise_conv.conv.weight: copying a param with shape torch.Size([240, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([480, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.8._bn1.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._se_reduce.conv.weight: copying a param with shape torch.Size([10, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._se_reduce.conv.bias: copying a param with shape torch.Size([10]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.8._se_expand.conv.weight: copying a param with shape torch.Size([240, 10, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._se_expand.conv.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._project_conv.conv.weight: copying a param with shape torch.Size([80, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._bn2.weight: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.running_mean: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.running_var: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._expand_conv.conv.weight: copying a param with shape torch.Size([480, 80, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._bn0.weight: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.running_mean: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.running_var: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._depthwise_conv.conv.weight: copying a param with shape torch.Size([480, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.9._bn1.weight: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.running_mean: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.running_var: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._se_reduce.conv.weight: copying a param with shape torch.Size([20, 480, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._se_reduce.conv.bias: copying a param with shape torch.Size([20]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.9._se_expand.conv.weight: copying a param with shape torch.Size([480, 20, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._se_expand.conv.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._project_conv.conv.weight: copying a param with shape torch.Size([80, 480, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._bn2.weight: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.running_mean: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.running_var: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._expand_conv.conv.weight: copying a param with shape torch.Size([480, 80, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._bn0.weight: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.running_mean: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.running_var: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._depthwise_conv.conv.weight: copying a param with shape torch.Size([480, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.10._bn1.weight: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.running_mean: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.running_var: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._se_reduce.conv.weight: copying a param with shape torch.Size([20, 480, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._se_reduce.conv.bias: copying a param with shape torch.Size([20]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.10._se_expand.conv.weight: copying a param with shape torch.Size([480, 20, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._se_expand.conv.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._project_conv.conv.weight: copying a param with shape torch.Size([80, 480, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._bn2.weight: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.running_mean: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.running_var: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.11._expand_conv.conv.weight: copying a param with shape torch.Size([480, 80, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._bn0.weight: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.running_mean: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.running_var: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._depthwise_conv.conv.weight: copying a param with shape torch.Size([480, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.11._bn1.weight: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.running_mean: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.running_var: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._se_reduce.conv.weight: copying a param with shape torch.Size([20, 480, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._se_reduce.conv.bias: copying a param with shape torch.Size([20]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.11._se_expand.conv.weight: copying a param with shape torch.Size([480, 20, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._se_expand.conv.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._project_conv.conv.weight: copying a param with shape torch.Size([80, 480, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._bn2.weight: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.running_mean: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.running_var: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._expand_conv.conv.weight: copying a param with shape torch.Size([480, 80, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._bn0.weight: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.running_mean: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.running_var: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._depthwise_conv.conv.weight: copying a param with shape torch.Size([480, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.12._bn1.weight: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.running_mean: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.running_var: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._se_reduce.conv.weight: copying a param with shape torch.Size([20, 480, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._se_reduce.conv.bias: copying a param with shape torch.Size([20]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.12._se_expand.conv.weight: copying a param with shape torch.Size([480, 20, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._se_expand.conv.bias: copying a param with shape torch.Size([480]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._project_conv.conv.weight: copying a param with shape torch.Size([112, 480, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._bn2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._expand_conv.conv.weight: copying a param with shape torch.Size([672, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._bn0.weight: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.running_mean: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.running_var: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._depthwise_conv.conv.weight: copying a param with shape torch.Size([672, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.13._bn1.weight: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.running_mean: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.running_var: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._se_reduce.conv.weight: copying a param with shape torch.Size([28, 672, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._se_reduce.conv.bias: copying a param with shape torch.Size([28]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.13._se_expand.conv.weight: copying a param with shape torch.Size([672, 28, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._se_expand.conv.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._project_conv.conv.weight: copying a param with shape torch.Size([112, 672, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._bn2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._expand_conv.conv.weight: copying a param with shape torch.Size([672, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._bn0.weight: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.running_mean: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.running_var: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._depthwise_conv.conv.weight: copying a param with shape torch.Size([672, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.14._bn1.weight: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.running_mean: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.running_var: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._se_reduce.conv.weight: copying a param with shape torch.Size([28, 672, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._se_reduce.conv.bias: copying a param with shape torch.Size([28]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.14._se_expand.conv.weight: copying a param with shape torch.Size([672, 28, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._se_expand.conv.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._project_conv.conv.weight: copying a param with shape torch.Size([112, 672, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._bn2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.15._expand_conv.conv.weight: copying a param with shape torch.Size([672, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._bn0.weight: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.running_mean: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.running_var: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._depthwise_conv.conv.weight: copying a param with shape torch.Size([672, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.15._bn1.weight: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.running_mean: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.running_var: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._se_reduce.conv.weight: copying a param with shape torch.Size([28, 672, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._se_reduce.conv.bias: copying a param with shape torch.Size([28]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.15._se_expand.conv.weight: copying a param with shape torch.Size([672, 28, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._se_expand.conv.bias: copying a param with shape torch.Size([672]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._project_conv.conv.weight: copying a param with shape torch.Size([112, 672, 1, 1]) from checkpoint, the shape in current model is torch.Size([320, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._bn2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([320]).
[Warning] Don't panic if you see this, this might be because you load a pretrained weights with different number of classes. The rest of the weights should be loaded already.
[Info] loaded weights: efficientdet-d1.pth, resuming checkpoint from step: 0
[Info] freezed backbone
Step: 45. Epoch: 0/30. Iteration: 46/46. Cls loss: 177.56024. Reg loss: 6.35019.
Val. Epoch: 0/30. Classification loss: 197.07510. Regression loss: 4.91854. Total loss: 201.99364
Step: 91. Epoch: 1/30. Iteration: 46/46. Cls loss: 154.98796. Reg loss: 5.12323.
Val. Epoch: 1/30. Classification loss: 190.25738. Regression loss: 4.83184. Total loss: 195.08921
Step: 137. Epoch: 2/30. Iteration: 46/46. Cls loss: 119.40449. Reg loss: 4.36435
Val. Epoch: 2/30. Classification loss: 177.95995. Regression loss: 4.72740. Total loss: 182.68734
Step: 149. Epoch: 3/30. Iteration: 12/46. Cls loss: 120.70280. Reg loss: 4.53664checkpoint...
Step: 183. Epoch: 3/30. Iteration: 46/46. Cls loss: 84.44751. Reg loss: 4.02208.
Val. Epoch: 3/30. Classification loss: 156.06479. Regression loss: 4.60331. Total loss: 160.66810
Step: 229. Epoch: 4/30. Iteration: 46/46. Cls loss: 50.97416. Reg loss: 3.73872.
Val. Epoch: 4/30. Classification loss: 120.35615. Regression loss: 4.46627. Total loss: 124.82242
Step: 275. Epoch: 5/30. Iteration: 46/46. Cls loss: 33.96172. Reg loss: 3.61036.
Val. Epoch: 5/30. Classification loss: 78.96576. Regression loss: 4.28941. Total loss: 83.25517
Step: 299. Epoch: 6/30. Iteration: 24/46. Cls loss: 26.08193. Reg loss: 3.75556.checkpoint...
Step: 321. Epoch: 6/30. Iteration: 46/46. Cls loss: 19.10294. Reg loss: 3.38169.
Val. Epoch: 6/30. Classification loss: 45.30455. Regression loss: 4.01178. Total loss: 49.31633
Step: 367. Epoch: 7/30. Iteration: 46/46. Cls loss: 12.62793. Reg loss: 3.43387.
Val. Epoch: 7/30. Classification loss: 23.72225. Regression loss: 3.66633. Total loss: 27.38858
Step: 413. Epoch: 8/30. Iteration: 46/46. Cls loss: 8.72362. Reg loss: 3.02593. 
Val. Epoch: 8/30. Classification loss: 12.38324. Regression loss: 3.29794. Total loss: 15.68118
Step: 449. Epoch: 9/30. Iteration: 36/46. Cls loss: 6.69499. Reg loss: 2.70351. checkpoint...
Step: 459. Epoch: 9/30. Iteration: 46/46. Cls loss: 6.90615. Reg loss: 2.98557. 
Val. Epoch: 9/30. Classification loss: 8.29397. Regression loss: 3.01907. Total loss: 11.31304
Step: 505. Epoch: 10/30. Iteration: 46/46. Cls loss: 4.90334. Reg loss: 2.62256.
Val. Epoch: 10/30. Classification loss: 6.13745. Regression loss: 2.84175. Total loss: 8.97920
Step: 551. Epoch: 11/30. Iteration: 46/46. Cls loss: 3.91226. Reg loss: 3.16707.
Val. Epoch: 11/30. Classification loss: 4.21840. Regression loss: 2.73811. Total loss: 6.95651
Step: 597. Epoch: 12/30. Iteration: 46/46. Cls loss: 3.08225. Reg loss: 3.17153.
Val. Epoch: 12/30. Classification loss: 3.25865. Regression loss: 2.66819. Total loss: 5.92684
Step: 599. Epoch: 13/30. Iteration: 2/46. Cls loss: 3.30876. Reg loss: 3.25482. checkpoint...
Step: 643. Epoch: 13/30. Iteration: 46/46. Cls loss: 2.53414. Reg loss: 2.78571.
Val. Epoch: 13/30. Classification loss: 2.75909. Regression loss: 2.66019. Total loss: 5.41928
Step: 689. Epoch: 14/30. Iteration: 46/46. Cls loss: 2.56922. Reg loss: 3.22246.
Val. Epoch: 14/30. Classification loss: 2.60603. Regression loss: 2.65576. Total loss: 5.26178
Step: 735. Epoch: 15/30. Iteration: 46/46. Cls loss: 2.04627. Reg loss: 3.28221.
Val. Epoch: 15/30. Classification loss: 1.98134. Regression loss: 2.62966. Total loss: 4.61100
Step: 749. Epoch: 16/30. Iteration: 14/46. Cls loss: 2.10166. Reg loss: 3.33442.checkpoint...
Step: 781. Epoch: 16/30. Iteration: 46/46. Cls loss: 1.58255. Reg loss: 2.75040.
Val. Epoch: 16/30. Classification loss: 1.79152. Regression loss: 2.62897. Total loss: 4.42049
Step: 827. Epoch: 17/30. Iteration: 46/46. Cls loss: 1.57425. Reg loss: 2.98176.
Val. Epoch: 17/30. Classification loss: 1.53200. Regression loss: 2.62914. Total loss: 4.16114
Step: 873. Epoch: 18/30. Iteration: 46/46. Cls loss: 1.34049. Reg loss: 2.94197.
Val. Epoch: 18/30. Classification loss: 1.37224. Regression loss: 2.61687. Total loss: 3.98911
Step: 899. Epoch: 19/30. Iteration: 26/46. Cls loss: 1.20084. Reg loss: 2.69026.checkpoint...
Step: 919. Epoch: 19/30. Iteration: 46/46. Cls loss: 1.19844. Reg loss: 2.85549.
Val. Epoch: 19/30. Classification loss: 1.23112. Regression loss: 2.62502. Total loss: 3.85614
Step: 965. Epoch: 20/30. Iteration: 46/46. Cls loss: 1.07356. Reg loss: 3.06492.
Val. Epoch: 20/30. Classification loss: 1.08224. Regression loss: 2.60146. Total loss: 3.68370
Step: 1011. Epoch: 21/30. Iteration: 46/46. Cls loss: 1.04833. Reg loss: 3.16539
Val. Epoch: 21/30. Classification loss: 1.01813. Regression loss: 2.60643. Total loss: 3.62456
Step: 1049. Epoch: 22/30. Iteration: 38/46. Cls loss: 0.92597. Reg loss: 2.74524checkpoint...
Step: 1057. Epoch: 22/30. Iteration: 46/46. Cls loss: 0.85400. Reg loss: 2.22236
Val. Epoch: 22/30. Classification loss: 0.96211. Regression loss: 2.59889. Total loss: 3.56100
Step: 1103. Epoch: 23/30. Iteration: 46/46. Cls loss: 0.81208. Reg loss: 2.26859
Val. Epoch: 23/30. Classification loss: 0.87280. Regression loss: 2.58584. Total loss: 3.45864
Step: 1149. Epoch: 24/30. Iteration: 46/46. Cls loss: 0.77718. Reg loss: 2.84558
Val. Epoch: 24/30. Classification loss: 0.80989. Regression loss: 2.57830. Total loss: 3.38819
Step: 1195. Epoch: 25/30. Iteration: 46/46. Cls loss: 0.80666. Reg loss: 3.43015
Val. Epoch: 25/30. Classification loss: 0.73210. Regression loss: 2.57616. Total loss: 3.30826
Step: 1199. Epoch: 26/30. Iteration: 4/46. Cls loss: 0.71216. Reg loss: 2.52251.checkpoint...
Step: 1241. Epoch: 26/30. Iteration: 46/46. Cls loss: 0.70995. Reg loss: 2.67293
Val. Epoch: 26/30. Classification loss: 0.69389. Regression loss: 2.57230. Total loss: 3.26619
Step: 1287. Epoch: 27/30. Iteration: 46/46. Cls loss: 0.65856. Reg loss: 2.72252
Val. Epoch: 27/30. Classification loss: 0.65306. Regression loss: 2.56009. Total loss: 3.21315
Step: 1333. Epoch: 28/30. Iteration: 46/46. Cls loss: 0.60936. Reg loss: 2.16856
Val. Epoch: 28/30. Classification loss: 0.62834. Regression loss: 2.55988. Total loss: 3.18822
Step: 1349. Epoch: 29/30. Iteration: 16/46. Cls loss: 0.60967. Reg loss: 3.08759checkpoint...
Step: 1379. Epoch: 29/30. Iteration: 46/46. Cls loss: 0.57119. Reg loss: 2.66380
Val. Epoch: 29/30. Classification loss: 0.58268. Regression loss: 2.54885. Total loss: 3.13153
In [8]:
#uncomment the next line to specify a weight file
weight_file = 'efficientdet-d1_29_final.pth'

! python Yet-Another-EfficientDet-Pytorch/coco_eval.py -c 0 -p cadod -w "logs/cadod/{weight_file}"
running coco-style evaluation on project cadod, weights logs/cadod/efficientdet-d1_29_final.pth...
loading annotations into memory...
Done (t=0.10s)
creating index...
index created!
100%|█████████████████████████████████████████| 500/500 [50:00<00:00,  6.00s/it]
Loading and preparing results...
DONE (t=27.71s)
creating index...
index created!
BBox
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=12.13s).
Accumulating evaluation results...
DONE (t=0.77s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.164
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.344
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.126
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.116
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.275
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.539
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.595
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.608
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.530
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.636
In [9]:
# Author: Zylo117

import torch
from torch import nn

from efficientdet.model import BiFPN, Regressor, Classifier, EfficientNet
from efficientdet.utils import Anchors


class EfficientDetBackbone(nn.Module):
    def __init__(self, num_classes=80, compound_coef=0, load_weights=False, **kwargs):
        super(EfficientDetBackbone, self).__init__()
        self.compound_coef = compound_coef

        self.backbone_compound_coef = [0, 1, 2, 3, 4, 5, 6, 6, 7]
        self.fpn_num_filters = [64, 88, 112, 160, 224, 288, 384, 384, 384]
        self.fpn_cell_repeats = [3, 4, 5, 6, 7, 7, 8, 8, 8]
        self.input_sizes = [512, 640, 768, 896, 1024, 1280, 1280, 1536, 1536]
        self.box_class_repeats = [3, 3, 3, 4, 4, 4, 5, 5, 5]
        self.pyramid_levels = [5, 5, 5, 5, 5, 5, 5, 5, 6]
        self.anchor_scale = [4., 4., 4., 4., 4., 4., 4., 5., 4.]
        self.aspect_ratios = kwargs.get('ratios', [(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)])
        self.num_scales = len(kwargs.get('scales', [2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]))
        conv_channel_coef = {
            # the channels of P3/P4/P5.
            0: [40, 112, 320],
            1: [40, 112, 320],
            2: [48, 120, 352],
            3: [48, 136, 384],
            4: [56, 160, 448],
            5: [64, 176, 512],
            6: [72, 200, 576],
            7: [72, 200, 576],
            8: [80, 224, 640],
        }

        num_anchors = len(self.aspect_ratios) * self.num_scales

        self.bifpn = nn.Sequential(
            *[BiFPN(self.fpn_num_filters[self.compound_coef],
                    conv_channel_coef[compound_coef],
                    True if _ == 0 else False,
                    attention=True if compound_coef < 6 else False,
                    use_p8=compound_coef > 7)
              for _ in range(self.fpn_cell_repeats[compound_coef])])

        self.num_classes = num_classes
        self.regressor = Regressor(in_channels=self.fpn_num_filters[self.compound_coef], num_anchors=num_anchors,
                                   num_layers=self.box_class_repeats[self.compound_coef],
                                   pyramid_levels=self.pyramid_levels[self.compound_coef])
        self.classifier = Classifier(in_channels=self.fpn_num_filters[self.compound_coef], num_anchors=num_anchors,
                                     num_classes=num_classes,
                                     num_layers=self.box_class_repeats[self.compound_coef],
                                     pyramid_levels=self.pyramid_levels[self.compound_coef])

        self.anchors = Anchors(anchor_scale=self.anchor_scale[compound_coef],
                               pyramid_levels=(torch.arange(self.pyramid_levels[self.compound_coef]) + 3).tolist(),
                               **kwargs)

        self.backbone_net = EfficientNet(self.backbone_compound_coef[compound_coef], load_weights)

    def freeze_bn(self):
        for m in self.modules():
            if isinstance(m, nn.BatchNorm2d):
                m.eval()

    def forward(self, inputs):
        max_size = inputs.shape[-1]

        _, p3, p4, p5 = self.backbone_net(inputs)

        features = (p3, p4, p5)
        features = self.bifpn(features)

        regression = self.regressor(features)
        classification = self.classifier(features)
        anchors = self.anchors(inputs, inputs.dtype)

        return features, regression, classification, anchors

    def init_backbone(self, path):
        state_dict = torch.load(path)
        try:
            ret = self.load_state_dict(state_dict, strict=False)
            print(ret)
        except RuntimeError as e:
            print('Ignoring ' + str(e) + '"')
In [10]:
import torch
from torch.backends import cudnn

from backbone import EfficientDetBackbone
import cv2
import matplotlib.pyplot as plt
import numpy as np

from efficientdet.utils import BBoxTransform, ClipBoxes
from utils.utils import preprocess, invert_affine, postprocess

compound_coef = 0
force_input_size = None  # set None to use default size
img_path = 'datasets/cadod/val/00e4d41ec48a1d17.jpg'

threshold = 0.2
iou_threshold = 0.2

use_cuda = True
use_float16 = False
cudnn.fastest = True
cudnn.benchmark = True

obj_list = [ 'cat', 'dog' ]

# tf bilinear interpolation is different from any other's, just make do
input_sizes = [512, 640, 768, 896, 1024, 1280, 1280, 1536]
input_size = input_sizes[compound_coef] if force_input_size is None else force_input_size
ori_imgs, framed_imgs, framed_metas = preprocess(img_path, max_size=input_size)


x = torch.stack([torch.from_numpy(fi) for fi in framed_imgs], 0)

x = x.to(torch.float32 if not use_float16 else torch.float16).permute(0, 3, 1, 2)

model = EfficientDetBackbone(compound_coef=compound_coef, num_classes=len(obj_list),

                             # replace this part with your project's anchor config
                             ratios=[(0.7, 1.4), (1.0, 1.0), (1.5, 0.7)],
                             scales=[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)])

model.load_state_dict(torch.load('logs/cadod/'+weight_file))
model.requires_grad_(False)
model.eval()



with torch.no_grad():
    features, regression, classification, anchors = model(x)

    regressBoxes = BBoxTransform()
    clipBoxes = ClipBoxes()

    out = postprocess(x,
                      anchors, regression, classification,
                      regressBoxes, clipBoxes,
                      threshold, iou_threshold)

out = invert_affine(framed_metas, out)

for i in range(len(ori_imgs)):
    if len(out[i]['rois']) == 0:
        continue
    ori_imgs[i] = ori_imgs[i].copy()
    for j in range(len(out[i]['rois'])):
        (x1, y1, x2, y2) = out[i]['rois'][j].astype(np.int)
        cv2.rectangle(ori_imgs[i], (x1, y1), (x2, y2), (255, 255, 0), 2)
        obj = obj_list[out[i]['class_ids'][j]]
        score = float(out[i]['scores'][j])

        cv2.putText(ori_imgs[i], '{}, {:.3f}'.format(obj, score),
                    (x1, y1 + 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                    (255, 255, 0), 1)

        plt.imshow(ori_imgs[i])

EfficientDet D2

In [1]:
import numpy as np
from collections import Counter
import glob
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import os
from PIL import Image
from sklearn.exceptions import ConvergenceWarning
from sklearn.linear_model import SGDClassifier, SGDRegressor
from sklearn.metrics import accuracy_score, mean_squared_error, roc_auc_score
from sklearn.model_selection import train_test_split
import tarfile
from tqdm.notebook import tqdm
In [2]:
# download pretrained weights
#! mkdir weights
! wget https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/1.0/efficientdet-d2.pth -O weights/efficientdet-d2.pth
--2021-12-15 14:08:32--  https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/1.0/efficientdet-d2.pth
Resolving github.com (github.com)... 140.82.112.3
Connecting to github.com (github.com)|140.82.112.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/253385242/4d3c5200-791e-11ea-878a-3c8c85078c4a?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211215%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211215T190832Z&X-Amz-Expires=300&X-Amz-Signature=fc7650e39daa64f6a058fa0b11a0ed7a78c6dfee4289288ca6064894d14f0bed&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=253385242&response-content-disposition=attachment%3B%20filename%3Defficientdet-d2.pth&response-content-type=application%2Foctet-stream [following]
--2021-12-15 14:08:33--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/253385242/4d3c5200-791e-11ea-878a-3c8c85078c4a?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211215%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211215T190832Z&X-Amz-Expires=300&X-Amz-Signature=fc7650e39daa64f6a058fa0b11a0ed7a78c6dfee4289288ca6064894d14f0bed&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=253385242&response-content-disposition=attachment%3B%20filename%3Defficientdet-d2.pth&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.111.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 32939863 (31M) [application/octet-stream]
Saving to: 'weights/efficientdet-d2.pth'

weights/efficientde 100%[===================>]  31.41M  7.04MB/s    in 4.3s    

2021-12-15 14:08:37 (7.25 MB/s) - 'weights/efficientdet-d2.pth' saved [32939863/32939863]

In [3]:
!cat cadod.yml
project_name: cadod  # also the folder name of the dataset that under data_path folder
train_set: train
val_set: val
num_gpus: 3

# mean and std in RGB order, actually this part should remain unchanged as long as your dataset is similar to coco.
mean: [ 0.485, 0.456, 0.406 ]
std: [ 0.229, 0.224, 0.225 ]

# this anchor is adapted to the dataset
anchors_scales: '[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]'
anchors_ratios: '[(1, 1.1), (1.3, 1.1), (1.1, 1.3)]'

obj_list: [ 'cat', 'dog' ]
In [53]:
#pip install opencv-python-headless
In [4]:
! python Yet-Another-EfficientDet-Pytorch/train.py -c 0 -p cadod --head_only True --lr 0.0002 --batch_size 32 --load_weights weights/efficientdet-d2.pth  --num_epochs 30 --save_interval 150
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
loading annotations into memory...
Done (t=0.00s)
creating index...
index created!
[Warning] Ignoring Error(s) in loading state_dict for EfficientDetBackbone:
	size mismatch for bifpn.0.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.0.conv.weight: copying a param with shape torch.Size([112, 352, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_down_channel.0.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.0.conv.weight: copying a param with shape torch.Size([112, 120, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 112, 1, 1]).
	size mismatch for bifpn.0.p4_down_channel.0.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.0.conv.weight: copying a param with shape torch.Size([112, 48, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 40, 1, 1]).
	size mismatch for bifpn.0.p3_down_channel.0.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.0.conv.weight: copying a param with shape torch.Size([112, 352, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_to_p6.0.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.0.conv.weight: copying a param with shape torch.Size([112, 120, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 112, 1, 1]).
	size mismatch for bifpn.0.p4_down_channel_2.0.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.0.conv.weight: copying a param with shape torch.Size([112, 352, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_down_channel_2.0.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.0.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.0.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.0.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.1.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.1.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.1.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.2.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.2.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.2.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.header.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.header.pointwise_conv.conv.weight: copying a param with shape torch.Size([36, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([36, 64, 1, 1]).
	size mismatch for classifier.conv_list.0.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.0.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.0.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.conv_list.1.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.1.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.1.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.conv_list.2.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.2.pointwise_conv.conv.weight: copying a param with shape torch.Size([112, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.2.pointwise_conv.conv.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.weight: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.bias: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.running_mean: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.running_var: copying a param with shape torch.Size([112]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.header.depthwise_conv.conv.weight: copying a param with shape torch.Size([112, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.header.pointwise_conv.conv.weight: copying a param with shape torch.Size([810, 112, 1, 1]) from checkpoint, the shape in current model is torch.Size([18, 64, 1, 1]).
	size mismatch for classifier.header.pointwise_conv.conv.bias: copying a param with shape torch.Size([810]) from checkpoint, the shape in current model is torch.Size([18]).
	size mismatch for backbone_net.model._blocks.1._depthwise_conv.conv.weight: copying a param with shape torch.Size([16, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.1._bn1.weight: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.bias: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.running_mean: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.running_var: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._se_reduce.conv.weight: copying a param with shape torch.Size([4, 16, 1, 1]) from checkpoint, the shape in current model is torch.Size([4, 96, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._se_expand.conv.weight: copying a param with shape torch.Size([16, 4, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 4, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._se_expand.conv.bias: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._project_conv.conv.weight: copying a param with shape torch.Size([16, 16, 1, 1]) from checkpoint, the shape in current model is torch.Size([24, 96, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._bn2.weight: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.bias: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.running_mean: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.running_var: copying a param with shape torch.Size([16]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.2._expand_conv.conv.weight: copying a param with shape torch.Size([96, 16, 1, 1]) from checkpoint, the shape in current model is torch.Size([144, 24, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._bn0.weight: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn0.bias: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn0.running_mean: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn0.running_var: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._depthwise_conv.conv.weight: copying a param with shape torch.Size([96, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([144, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.2._bn1.weight: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.bias: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.running_mean: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.running_var: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._se_reduce.conv.weight: copying a param with shape torch.Size([4, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([6, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._se_reduce.conv.bias: copying a param with shape torch.Size([4]) from checkpoint, the shape in current model is torch.Size([6]).
	size mismatch for backbone_net.model._blocks.2._se_expand.conv.weight: copying a param with shape torch.Size([96, 4, 1, 1]) from checkpoint, the shape in current model is torch.Size([144, 6, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._se_expand.conv.bias: copying a param with shape torch.Size([96]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._project_conv.conv.weight: copying a param with shape torch.Size([24, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([24, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.3._depthwise_conv.conv.weight: copying a param with shape torch.Size([144, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([144, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.3._project_conv.conv.weight: copying a param with shape torch.Size([24, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([40, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.3._bn2.weight: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.3._bn2.bias: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.3._bn2.running_mean: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.3._bn2.running_var: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.4._expand_conv.conv.weight: copying a param with shape torch.Size([144, 24, 1, 1]) from checkpoint, the shape in current model is torch.Size([240, 40, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._bn0.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn0.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn0.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn0.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._depthwise_conv.conv.weight: copying a param with shape torch.Size([144, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([240, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.4._bn1.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn1.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn1.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._bn1.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._se_reduce.conv.weight: copying a param with shape torch.Size([6, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([10, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._se_reduce.conv.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([10]).
	size mismatch for backbone_net.model._blocks.4._se_expand.conv.weight: copying a param with shape torch.Size([144, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([240, 10, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._se_expand.conv.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.4._project_conv.conv.weight: copying a param with shape torch.Size([24, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([40, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._bn2.weight: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.4._bn2.bias: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.4._bn2.running_mean: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.4._bn2.running_var: copying a param with shape torch.Size([24]) from checkpoint, the shape in current model is torch.Size([40]).
	size mismatch for backbone_net.model._blocks.5._expand_conv.conv.weight: copying a param with shape torch.Size([144, 24, 1, 1]) from checkpoint, the shape in current model is torch.Size([240, 40, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._bn0.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn0.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn0.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn0.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._depthwise_conv.conv.weight: copying a param with shape torch.Size([144, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([240, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.5._bn1.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn1.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn1.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._bn1.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._se_reduce.conv.weight: copying a param with shape torch.Size([6, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([10, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._se_reduce.conv.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([10]).
	size mismatch for backbone_net.model._blocks.5._se_expand.conv.weight: copying a param with shape torch.Size([144, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([240, 10, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._se_expand.conv.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([240]).
	size mismatch for backbone_net.model._blocks.5._project_conv.conv.weight: copying a param with shape torch.Size([48, 144, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._bn2.weight: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.bias: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.running_mean: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.running_var: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._expand_conv.conv.weight: copying a param with shape torch.Size([288, 48, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._bn0.weight: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.running_mean: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.running_var: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._depthwise_conv.conv.weight: copying a param with shape torch.Size([288, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([480, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.6._bn1.weight: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.running_mean: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.running_var: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._se_reduce.conv.weight: copying a param with shape torch.Size([12, 288, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._se_reduce.conv.bias: copying a param with shape torch.Size([12]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.6._se_expand.conv.weight: copying a param with shape torch.Size([288, 12, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._se_expand.conv.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._project_conv.conv.weight: copying a param with shape torch.Size([48, 288, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._bn2.weight: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.bias: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.running_mean: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.running_var: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._expand_conv.conv.weight: copying a param with shape torch.Size([288, 48, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._bn0.weight: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.running_mean: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.running_var: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._depthwise_conv.conv.weight: copying a param with shape torch.Size([288, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([480, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.7._bn1.weight: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.running_mean: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.running_var: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._se_reduce.conv.weight: copying a param with shape torch.Size([12, 288, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._se_reduce.conv.bias: copying a param with shape torch.Size([12]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.7._se_expand.conv.weight: copying a param with shape torch.Size([288, 12, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._se_expand.conv.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._project_conv.conv.weight: copying a param with shape torch.Size([48, 288, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._bn2.weight: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.bias: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.running_mean: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.running_var: copying a param with shape torch.Size([48]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.8._expand_conv.conv.weight: copying a param with shape torch.Size([288, 48, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._bn0.weight: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.running_mean: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.running_var: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._depthwise_conv.conv.weight: copying a param with shape torch.Size([288, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([480, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.8._bn1.weight: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.running_mean: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.running_var: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._se_reduce.conv.weight: copying a param with shape torch.Size([12, 288, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._se_reduce.conv.bias: copying a param with shape torch.Size([12]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.8._se_expand.conv.weight: copying a param with shape torch.Size([288, 12, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._se_expand.conv.bias: copying a param with shape torch.Size([288]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._project_conv.conv.weight: copying a param with shape torch.Size([88, 288, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._bn2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._expand_conv.conv.weight: copying a param with shape torch.Size([528, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._bn0.weight: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.running_mean: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.running_var: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._depthwise_conv.conv.weight: copying a param with shape torch.Size([528, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.9._bn1.weight: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.running_mean: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.running_var: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._se_reduce.conv.weight: copying a param with shape torch.Size([22, 528, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._se_reduce.conv.bias: copying a param with shape torch.Size([22]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.9._se_expand.conv.weight: copying a param with shape torch.Size([528, 22, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._se_expand.conv.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._project_conv.conv.weight: copying a param with shape torch.Size([88, 528, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._bn2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._expand_conv.conv.weight: copying a param with shape torch.Size([528, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._bn0.weight: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.running_mean: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.running_var: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._depthwise_conv.conv.weight: copying a param with shape torch.Size([528, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.10._bn1.weight: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.running_mean: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.running_var: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._se_reduce.conv.weight: copying a param with shape torch.Size([22, 528, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._se_reduce.conv.bias: copying a param with shape torch.Size([22]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.10._se_expand.conv.weight: copying a param with shape torch.Size([528, 22, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._se_expand.conv.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._project_conv.conv.weight: copying a param with shape torch.Size([88, 528, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._bn2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.11._expand_conv.conv.weight: copying a param with shape torch.Size([528, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._bn0.weight: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.running_mean: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.running_var: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._depthwise_conv.conv.weight: copying a param with shape torch.Size([528, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.11._bn1.weight: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.running_mean: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.running_var: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._se_reduce.conv.weight: copying a param with shape torch.Size([22, 528, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._se_reduce.conv.bias: copying a param with shape torch.Size([22]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.11._se_expand.conv.weight: copying a param with shape torch.Size([528, 22, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._se_expand.conv.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._project_conv.conv.weight: copying a param with shape torch.Size([88, 528, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._bn2.weight: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.bias: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.running_mean: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.running_var: copying a param with shape torch.Size([88]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._expand_conv.conv.weight: copying a param with shape torch.Size([528, 88, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._bn0.weight: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.running_mean: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.running_var: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._depthwise_conv.conv.weight: copying a param with shape torch.Size([528, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.12._bn1.weight: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.running_mean: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.running_var: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._se_reduce.conv.weight: copying a param with shape torch.Size([22, 528, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._se_reduce.conv.bias: copying a param with shape torch.Size([22]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.12._se_expand.conv.weight: copying a param with shape torch.Size([528, 22, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._se_expand.conv.bias: copying a param with shape torch.Size([528]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._project_conv.conv.weight: copying a param with shape torch.Size([120, 528, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._bn2.weight: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.bias: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.running_mean: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.running_var: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._expand_conv.conv.weight: copying a param with shape torch.Size([720, 120, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._bn0.weight: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.running_mean: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.running_var: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._depthwise_conv.conv.weight: copying a param with shape torch.Size([720, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.13._bn1.weight: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.running_mean: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.running_var: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._se_reduce.conv.weight: copying a param with shape torch.Size([30, 720, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._se_reduce.conv.bias: copying a param with shape torch.Size([30]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.13._se_expand.conv.weight: copying a param with shape torch.Size([720, 30, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._se_expand.conv.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._project_conv.conv.weight: copying a param with shape torch.Size([120, 720, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._bn2.weight: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.bias: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.running_mean: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.running_var: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._expand_conv.conv.weight: copying a param with shape torch.Size([720, 120, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._bn0.weight: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.running_mean: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.running_var: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._depthwise_conv.conv.weight: copying a param with shape torch.Size([720, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.14._bn1.weight: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.running_mean: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.running_var: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._se_reduce.conv.weight: copying a param with shape torch.Size([30, 720, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._se_reduce.conv.bias: copying a param with shape torch.Size([30]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.14._se_expand.conv.weight: copying a param with shape torch.Size([720, 30, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._se_expand.conv.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._project_conv.conv.weight: copying a param with shape torch.Size([120, 720, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._bn2.weight: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.bias: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.running_mean: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.running_var: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.15._expand_conv.conv.weight: copying a param with shape torch.Size([720, 120, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._bn0.weight: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.running_mean: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.running_var: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._depthwise_conv.conv.weight: copying a param with shape torch.Size([720, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.15._bn1.weight: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.running_mean: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.running_var: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._se_reduce.conv.weight: copying a param with shape torch.Size([30, 720, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._se_reduce.conv.bias: copying a param with shape torch.Size([30]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.15._se_expand.conv.weight: copying a param with shape torch.Size([720, 30, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._se_expand.conv.bias: copying a param with shape torch.Size([720]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._project_conv.conv.weight: copying a param with shape torch.Size([120, 720, 1, 1]) from checkpoint, the shape in current model is torch.Size([320, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._bn2.weight: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.bias: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.running_mean: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.running_var: copying a param with shape torch.Size([120]) from checkpoint, the shape in current model is torch.Size([320]).
[Warning] Don't panic if you see this, this might be because you load a pretrained weights with different number of classes. The rest of the weights should be loaded already.
[Info] loaded weights: efficientdet-d2.pth, resuming checkpoint from step: 0
[Info] freezed backbone
Step: 45. Epoch: 0/30. Iteration: 46/46. Cls loss: 178.68004. Reg loss: 6.10284.
Val. Epoch: 0/30. Classification loss: 197.08472. Regression loss: 4.74796. Total loss: 201.83268
Step: 91. Epoch: 1/30. Iteration: 46/46. Cls loss: 155.85924. Reg loss: 5.02758.
Val. Epoch: 1/30. Classification loss: 190.16688. Regression loss: 4.68797. Total loss: 194.85484
Step: 137. Epoch: 2/30. Iteration: 46/46. Cls loss: 119.30363. Reg loss: 4.25751
Val. Epoch: 2/30. Classification loss: 176.86409. Regression loss: 4.61054. Total loss: 181.47463
Step: 149. Epoch: 3/30. Iteration: 12/46. Cls loss: 121.41708. Reg loss: 4.37583checkpoint...
Step: 183. Epoch: 3/30. Iteration: 46/46. Cls loss: 85.14330. Reg loss: 3.87212.
Val. Epoch: 3/30. Classification loss: 154.64935. Regression loss: 4.51389. Total loss: 159.16324
Step: 229. Epoch: 4/30. Iteration: 46/46. Cls loss: 51.60747. Reg loss: 3.69295.
Val. Epoch: 4/30. Classification loss: 121.68714. Regression loss: 4.40853. Total loss: 126.09567
Step: 275. Epoch: 5/30. Iteration: 46/46. Cls loss: 34.16340. Reg loss: 3.54158.
Val. Epoch: 5/30. Classification loss: 82.17191. Regression loss: 4.25940. Total loss: 86.43131
Step: 299. Epoch: 6/30. Iteration: 24/46. Cls loss: 26.76702. Reg loss: 3.66261.checkpoint...
Step: 321. Epoch: 6/30. Iteration: 46/46. Cls loss: 19.19675. Reg loss: 3.17556.
Val. Epoch: 6/30. Classification loss: 45.34168. Regression loss: 4.03739. Total loss: 49.37908
Step: 367. Epoch: 7/30. Iteration: 46/46. Cls loss: 12.69395. Reg loss: 3.26873.
Val. Epoch: 7/30. Classification loss: 23.33850. Regression loss: 3.73204. Total loss: 27.07054
Step: 413. Epoch: 8/30. Iteration: 46/46. Cls loss: 8.77857. Reg loss: 3.07910. 
Val. Epoch: 8/30. Classification loss: 11.41696. Regression loss: 3.38134. Total loss: 14.79830
Step: 449. Epoch: 9/30. Iteration: 36/46. Cls loss: 6.71105. Reg loss: 2.74232. checkpoint...
Step: 459. Epoch: 9/30. Iteration: 46/46. Cls loss: 6.85776. Reg loss: 2.94172. 
Val. Epoch: 9/30. Classification loss: 7.19912. Regression loss: 3.09726. Total loss: 10.29639
Step: 505. Epoch: 10/30. Iteration: 46/46. Cls loss: 4.92780. Reg loss: 2.55565.
Val. Epoch: 10/30. Classification loss: 5.34976. Regression loss: 2.88552. Total loss: 8.23528
Step: 551. Epoch: 11/30. Iteration: 46/46. Cls loss: 3.97808. Reg loss: 3.09497.
Val. Epoch: 11/30. Classification loss: 3.87147. Regression loss: 2.76197. Total loss: 6.63344
Step: 597. Epoch: 12/30. Iteration: 46/46. Cls loss: 3.09373. Reg loss: 3.16368.
Val. Epoch: 12/30. Classification loss: 2.99664. Regression loss: 2.67529. Total loss: 5.67193
Step: 599. Epoch: 13/30. Iteration: 2/46. Cls loss: 3.26344. Reg loss: 3.12404. checkpoint...
Step: 643. Epoch: 13/30. Iteration: 46/46. Cls loss: 2.55293. Reg loss: 2.76744.
Val. Epoch: 13/30. Classification loss: 2.64331. Regression loss: 2.63848. Total loss: 5.28179
Step: 689. Epoch: 14/30. Iteration: 46/46. Cls loss: 2.64141. Reg loss: 3.16843.
Val. Epoch: 14/30. Classification loss: 2.45806. Regression loss: 2.63057. Total loss: 5.08862
Step: 735. Epoch: 15/30. Iteration: 46/46. Cls loss: 2.04242. Reg loss: 3.08423.
Val. Epoch: 15/30. Classification loss: 1.98022. Regression loss: 2.61589. Total loss: 4.59611
Step: 749. Epoch: 16/30. Iteration: 14/46. Cls loss: 2.11521. Reg loss: 3.26931.checkpoint...
Step: 781. Epoch: 16/30. Iteration: 46/46. Cls loss: 1.57957. Reg loss: 2.74760.
Val. Epoch: 16/30. Classification loss: 1.74057. Regression loss: 2.62700. Total loss: 4.36757
Step: 827. Epoch: 17/30. Iteration: 46/46. Cls loss: 1.55175. Reg loss: 2.96123.
Val. Epoch: 17/30. Classification loss: 1.49737. Regression loss: 2.60920. Total loss: 4.10657
Step: 873. Epoch: 18/30. Iteration: 46/46. Cls loss: 1.32724. Reg loss: 2.93632.
Val. Epoch: 18/30. Classification loss: 1.43549. Regression loss: 2.61206. Total loss: 4.04754
Step: 899. Epoch: 19/30. Iteration: 26/46. Cls loss: 1.22261. Reg loss: 2.75586.checkpoint...
Step: 919. Epoch: 19/30. Iteration: 46/46. Cls loss: 1.20055. Reg loss: 2.87876.
Val. Epoch: 19/30. Classification loss: 1.17677. Regression loss: 2.61402. Total loss: 3.79079
Step: 965. Epoch: 20/30. Iteration: 46/46. Cls loss: 1.06766. Reg loss: 3.18241.
Val. Epoch: 20/30. Classification loss: 1.10179. Regression loss: 2.61463. Total loss: 3.71642
Step: 1011. Epoch: 21/30. Iteration: 46/46. Cls loss: 1.03755. Reg loss: 3.06813
Val. Epoch: 21/30. Classification loss: 1.00643. Regression loss: 2.61620. Total loss: 3.62263
Step: 1049. Epoch: 22/30. Iteration: 38/46. Cls loss: 0.90767. Reg loss: 2.70037checkpoint...
Step: 1057. Epoch: 22/30. Iteration: 46/46. Cls loss: 0.87228. Reg loss: 2.27429
Val. Epoch: 22/30. Classification loss: 0.94646. Regression loss: 2.59276. Total loss: 3.53922
Step: 1103. Epoch: 23/30. Iteration: 46/46. Cls loss: 0.79420. Reg loss: 2.20288
Val. Epoch: 23/30. Classification loss: 0.89990. Regression loss: 2.58366. Total loss: 3.48356
Step: 1149. Epoch: 24/30. Iteration: 46/46. Cls loss: 0.78557. Reg loss: 2.79525
Val. Epoch: 24/30. Classification loss: 0.80608. Regression loss: 2.57862. Total loss: 3.38470
Step: 1195. Epoch: 25/30. Iteration: 46/46. Cls loss: 0.78997. Reg loss: 3.45578
^C
In [5]:
%cd logs/cadod
weight_file = !ls -Art | grep efficientdet
%cd ../..
/N/home/u090/svtranga/Carbonate/Downloads/logs/cadod
/N/home/u090/svtranga/Carbonate/Downloads
In [9]:
#uncomment the next line to specify a weight file
weight_file[-1] = 'efficientdet-d2_25_final.pth'

! python Yet-Another-EfficientDet-Pytorch/coco_eval.py -c 0 -p cadod -w "logs/cadod/{weight_file[-1]}"
running coco-style evaluation on project cadod, weights logs/cadod/efficientdet-d2_25_final.pth...
loading annotations into memory...
Done (t=0.00s)
creating index...
index created!
100%|█████████████████████████████████████████| 500/500 [46:54<00:00,  5.63s/it]
Loading and preparing results...
DONE (t=26.68s)
creating index...
index created!
BBox
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=12.82s).
Accumulating evaluation results...
DONE (t=0.70s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.139
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.290
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.105
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.111
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.278
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.533
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.596
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.608
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.520
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.640
In [11]:
# Author: Zylo117

import torch
from torch import nn

from efficientdet.model import BiFPN, Regressor, Classifier, EfficientNet
from efficientdet.utils import Anchors


class EfficientDetBackbone(nn.Module):
    def __init__(self, num_classes=80, compound_coef=0, load_weights=False, **kwargs):
        super(EfficientDetBackbone, self).__init__()
        self.compound_coef = compound_coef

        self.backbone_compound_coef = [0, 1, 2, 3, 4, 5, 6, 6, 7]
        self.fpn_num_filters = [64, 88, 112, 160, 224, 288, 384, 384, 384]
        self.fpn_cell_repeats = [3, 4, 5, 6, 7, 7, 8, 8, 8]
        self.input_sizes = [512, 640, 768, 896, 1024, 1280, 1280, 1536, 1536]
        self.box_class_repeats = [3, 3, 3, 4, 4, 4, 5, 5, 5]
        self.pyramid_levels = [5, 5, 5, 5, 5, 5, 5, 5, 6]
        self.anchor_scale = [4., 4., 4., 4., 4., 4., 4., 5., 4.]
        self.aspect_ratios = kwargs.get('ratios', [(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)])
        self.num_scales = len(kwargs.get('scales', [2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]))
        conv_channel_coef = {
            # the channels of P3/P4/P5.
            0: [40, 112, 320],
            1: [40, 112, 320],
            2: [48, 120, 352],
            3: [48, 136, 384],
            4: [56, 160, 448],
            5: [64, 176, 512],
            6: [72, 200, 576],
            7: [72, 200, 576],
            8: [80, 224, 640],
        }

        num_anchors = len(self.aspect_ratios) * self.num_scales

        self.bifpn = nn.Sequential(
            *[BiFPN(self.fpn_num_filters[self.compound_coef],
                    conv_channel_coef[compound_coef],
                    True if _ == 0 else False,
                    attention=True if compound_coef < 6 else False,
                    use_p8=compound_coef > 7)
              for _ in range(self.fpn_cell_repeats[compound_coef])])

        self.num_classes = num_classes
        self.regressor = Regressor(in_channels=self.fpn_num_filters[self.compound_coef], num_anchors=num_anchors,
                                   num_layers=self.box_class_repeats[self.compound_coef],
                                   pyramid_levels=self.pyramid_levels[self.compound_coef])
        self.classifier = Classifier(in_channels=self.fpn_num_filters[self.compound_coef], num_anchors=num_anchors,
                                     num_classes=num_classes,
                                     num_layers=self.box_class_repeats[self.compound_coef],
                                     pyramid_levels=self.pyramid_levels[self.compound_coef])

        self.anchors = Anchors(anchor_scale=self.anchor_scale[compound_coef],
                               pyramid_levels=(torch.arange(self.pyramid_levels[self.compound_coef]) + 3).tolist(),
                               **kwargs)

        self.backbone_net = EfficientNet(self.backbone_compound_coef[compound_coef], load_weights)

    def freeze_bn(self):
        for m in self.modules():
            if isinstance(m, nn.BatchNorm2d):
                m.eval()

    def forward(self, inputs):
        max_size = inputs.shape[-1]

        _, p3, p4, p5 = self.backbone_net(inputs)

        features = (p3, p4, p5)
        features = self.bifpn(features)

        regression = self.regressor(features)
        classification = self.classifier(features)
        anchors = self.anchors(inputs, inputs.dtype)

        return features, regression, classification, anchors

    def init_backbone(self, path):
        state_dict = torch.load(path)
        try:
            ret = self.load_state_dict(state_dict, strict=False)
            print(ret)
        except RuntimeError as e:
            print('Ignoring ' + str(e) + '"')
In [33]:
import matplotlib
matplotlib.pyplot.ion()
Out[33]:
<matplotlib.pyplot._IonContext at 0x7fd1f482ce90>
In [ ]:
 

EfficientDet D7

In [1]:
import numpy as np
from collections import Counter
import glob
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import os
from PIL import Image
from sklearn.exceptions import ConvergenceWarning
from sklearn.linear_model import SGDClassifier, SGDRegressor
from sklearn.metrics import accuracy_score, mean_squared_error, roc_auc_score
from sklearn.model_selection import train_test_split
import tarfile
from tqdm.notebook import tqdm
In [2]:
# download pretrained weights
#! mkdir weights
! wget https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/1.0/efficientdet-d7.pth -O weights/efficientdet-d7.pth
--2021-12-15 21:13:03--  https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch/releases/download/1.0/efficientdet-d7.pth
Resolving github.com (github.com)... 140.82.112.4
Connecting to github.com (github.com)|140.82.112.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/253385242/a3f29780-7b7b-11ea-8700-d76da4e6c5e7?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211216%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211216T021303Z&X-Amz-Expires=300&X-Amz-Signature=ceb24fc94c6e30a927c9d52bb4e65ce0665b7ebb015896b54ba59dce53544b3e&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=253385242&response-content-disposition=attachment%3B%20filename%3Defficientdet-d7.pth&response-content-type=application%2Foctet-stream [following]
--2021-12-15 21:13:03--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/253385242/a3f29780-7b7b-11ea-8700-d76da4e6c5e7?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211216%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211216T021303Z&X-Amz-Expires=300&X-Amz-Signature=ceb24fc94c6e30a927c9d52bb4e65ce0665b7ebb015896b54ba59dce53544b3e&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=253385242&response-content-disposition=attachment%3B%20filename%3Defficientdet-d7.pth&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.108.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 209116571 (199M) [application/octet-stream]
Saving to: 'weights/efficientdet-d7.pth'

weights/efficientde 100%[===================>] 199.43M  32.7MB/s    in 7.4s    

2021-12-15 21:13:11 (27.1 MB/s) - 'weights/efficientdet-d7.pth' saved [209116571/209116571]

In [3]:
!cat cadod.yml
project_name: cadod  # also the folder name of the dataset that under data_path folder
train_set: train
val_set: val
num_gpus: 3

# mean and std in RGB order, actually this part should remain unchanged as long as your dataset is similar to coco.
mean: [ 0.485, 0.456, 0.406 ]
std: [ 0.229, 0.224, 0.225 ]

# this anchor is adapted to the dataset
anchors_scales: '[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]'
anchors_ratios: '[(1, 1.1), (1.3, 1.1), (1.1, 1.3)]'

obj_list: [ 'cat', 'dog' ]
In [53]:
#pip install opencv-python-headless
In [16]:
! python Yet-Another-EfficientDet-Pytorch/train.py -c 0 -p cadod --head_only True --lr 0.0002 --batch_size 32 --load_weights weights/efficientdet-d7.pth  --num_epochs 30 --save_interval 150
loading annotations into memory...
Done (t=0.02s)
creating index...
index created!
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
[Warning] Ignoring Error(s) in loading state_dict for EfficientDetBackbone:
	size mismatch for bifpn.0.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv3_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv4_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv5_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv6_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.0.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.0.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.conv7_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.0.conv.weight: copying a param with shape torch.Size([384, 576, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_down_channel.0.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.0.conv.weight: copying a param with shape torch.Size([384, 200, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 112, 1, 1]).
	size mismatch for bifpn.0.p4_down_channel.0.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.0.conv.weight: copying a param with shape torch.Size([384, 72, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 40, 1, 1]).
	size mismatch for bifpn.0.p3_down_channel.0.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p3_down_channel.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.0.conv.weight: copying a param with shape torch.Size([384, 576, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_to_p6.0.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_to_p6.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.0.conv.weight: copying a param with shape torch.Size([384, 200, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 112, 1, 1]).
	size mismatch for bifpn.0.p4_down_channel_2.0.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p4_down_channel_2.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.0.conv.weight: copying a param with shape torch.Size([384, 576, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 320, 1, 1]).
	size mismatch for bifpn.0.p5_down_channel_2.0.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.0.p5_down_channel_2.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv3_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv4_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv5_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv6_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.1.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.1.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.1.conv7_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv6_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv6_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv5_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv5_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv4_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv4_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv3_up.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv3_up.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv3_up.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv4_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv4_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv4_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv5_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv5_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv5_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv6_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv6_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv6_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for bifpn.2.conv7_down.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for bifpn.2.conv7_down.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for bifpn.2.conv7_down.bn.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.0.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.0.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.0.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.1.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.1.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.1.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.conv_list.2.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.conv_list.2.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for regressor.conv_list.2.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.0.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.1.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.2.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.3.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.bn_list.4.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for regressor.header.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for regressor.header.pointwise_conv.conv.weight: copying a param with shape torch.Size([36, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([36, 64, 1, 1]).
	size mismatch for classifier.conv_list.0.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.0.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.0.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.conv_list.1.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.1.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.1.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.conv_list.2.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.conv_list.2.pointwise_conv.conv.weight: copying a param with shape torch.Size([384, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([64, 64, 1, 1]).
	size mismatch for classifier.conv_list.2.pointwise_conv.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.0.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.1.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.2.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.3.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.0.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.1.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.running_mean: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.bn_list.4.2.running_var: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([64]).
	size mismatch for classifier.header.depthwise_conv.conv.weight: copying a param with shape torch.Size([384, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 1, 3, 3]).
	size mismatch for classifier.header.pointwise_conv.conv.weight: copying a param with shape torch.Size([810, 384, 1, 1]) from checkpoint, the shape in current model is torch.Size([18, 64, 1, 1]).
	size mismatch for classifier.header.pointwise_conv.conv.bias: copying a param with shape torch.Size([810]) from checkpoint, the shape in current model is torch.Size([18]).
	size mismatch for backbone_net.model._conv_stem.conv.weight: copying a param with shape torch.Size([56, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 3, 3, 3]).
	size mismatch for backbone_net.model._bn0.weight: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._bn0.bias: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._bn0.running_mean: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._bn0.running_var: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._blocks.0._depthwise_conv.conv.weight: copying a param with shape torch.Size([56, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.0._bn1.weight: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._blocks.0._bn1.bias: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._blocks.0._bn1.running_mean: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._blocks.0._bn1.running_var: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._blocks.0._se_reduce.conv.weight: copying a param with shape torch.Size([14, 56, 1, 1]) from checkpoint, the shape in current model is torch.Size([8, 32, 1, 1]).
	size mismatch for backbone_net.model._blocks.0._se_reduce.conv.bias: copying a param with shape torch.Size([14]) from checkpoint, the shape in current model is torch.Size([8]).
	size mismatch for backbone_net.model._blocks.0._se_expand.conv.weight: copying a param with shape torch.Size([56, 14, 1, 1]) from checkpoint, the shape in current model is torch.Size([32, 8, 1, 1]).
	size mismatch for backbone_net.model._blocks.0._se_expand.conv.bias: copying a param with shape torch.Size([56]) from checkpoint, the shape in current model is torch.Size([32]).
	size mismatch for backbone_net.model._blocks.0._project_conv.conv.weight: copying a param with shape torch.Size([32, 56, 1, 1]) from checkpoint, the shape in current model is torch.Size([16, 32, 1, 1]).
	size mismatch for backbone_net.model._blocks.0._bn2.weight: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([16]).
	size mismatch for backbone_net.model._blocks.0._bn2.bias: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([16]).
	size mismatch for backbone_net.model._blocks.0._bn2.running_mean: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([16]).
	size mismatch for backbone_net.model._blocks.0._bn2.running_var: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([16]).
	size mismatch for backbone_net.model._blocks.1._depthwise_conv.conv.weight: copying a param with shape torch.Size([32, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.1._bn1.weight: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.bias: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.running_mean: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._bn1.running_var: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._se_reduce.conv.weight: copying a param with shape torch.Size([8, 32, 1, 1]) from checkpoint, the shape in current model is torch.Size([4, 96, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._se_reduce.conv.bias: copying a param with shape torch.Size([8]) from checkpoint, the shape in current model is torch.Size([4]).
	size mismatch for backbone_net.model._blocks.1._se_expand.conv.weight: copying a param with shape torch.Size([32, 8, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 4, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._se_expand.conv.bias: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([96]).
	size mismatch for backbone_net.model._blocks.1._project_conv.conv.weight: copying a param with shape torch.Size([32, 32, 1, 1]) from checkpoint, the shape in current model is torch.Size([24, 96, 1, 1]).
	size mismatch for backbone_net.model._blocks.1._bn2.weight: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.bias: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.running_mean: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.1._bn2.running_var: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.2._depthwise_conv.conv.weight: copying a param with shape torch.Size([32, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([144, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.2._bn1.weight: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.bias: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.running_mean: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._bn1.running_var: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._se_reduce.conv.weight: copying a param with shape torch.Size([8, 32, 1, 1]) from checkpoint, the shape in current model is torch.Size([6, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._se_reduce.conv.bias: copying a param with shape torch.Size([8]) from checkpoint, the shape in current model is torch.Size([6]).
	size mismatch for backbone_net.model._blocks.2._se_expand.conv.weight: copying a param with shape torch.Size([32, 8, 1, 1]) from checkpoint, the shape in current model is torch.Size([144, 6, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._se_expand.conv.bias: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.2._project_conv.conv.weight: copying a param with shape torch.Size([32, 32, 1, 1]) from checkpoint, the shape in current model is torch.Size([24, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.2._bn2.weight: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.2._bn2.bias: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.2._bn2.running_mean: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.2._bn2.running_var: copying a param with shape torch.Size([32]) from checkpoint, the shape in current model is torch.Size([24]).
	size mismatch for backbone_net.model._blocks.3._expand_conv.conv.weight: copying a param with shape torch.Size([192, 32, 1, 1]) from checkpoint, the shape in current model is torch.Size([144, 24, 1, 1]).
	size mismatch for backbone_net.model._blocks.3._bn0.weight: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._bn0.bias: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._bn0.running_mean: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._bn0.running_var: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._depthwise_conv.conv.weight: copying a param with shape torch.Size([192, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([144, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.3._bn1.weight: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._bn1.bias: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._bn1.running_mean: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._bn1.running_var: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._se_reduce.conv.weight: copying a param with shape torch.Size([8, 192, 1, 1]) from checkpoint, the shape in current model is torch.Size([6, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.3._se_reduce.conv.bias: copying a param with shape torch.Size([8]) from checkpoint, the shape in current model is torch.Size([6]).
	size mismatch for backbone_net.model._blocks.3._se_expand.conv.weight: copying a param with shape torch.Size([192, 8, 1, 1]) from checkpoint, the shape in current model is torch.Size([144, 6, 1, 1]).
	size mismatch for backbone_net.model._blocks.3._se_expand.conv.bias: copying a param with shape torch.Size([192]) from checkpoint, the shape in current model is torch.Size([144]).
	size mismatch for backbone_net.model._blocks.3._project_conv.conv.weight: copying a param with shape torch.Size([40, 192, 1, 1]) from checkpoint, the shape in current model is torch.Size([40, 144, 1, 1]).
	size mismatch for backbone_net.model._blocks.4._depthwise_conv.conv.weight: copying a param with shape torch.Size([240, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([240, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.5._project_conv.conv.weight: copying a param with shape torch.Size([40, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 240, 1, 1]).
	size mismatch for backbone_net.model._blocks.5._bn2.weight: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.bias: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.running_mean: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.5._bn2.running_var: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._expand_conv.conv.weight: copying a param with shape torch.Size([240, 40, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._bn0.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn0.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._depthwise_conv.conv.weight: copying a param with shape torch.Size([240, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([480, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.6._bn1.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._bn1.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._se_reduce.conv.weight: copying a param with shape torch.Size([10, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._se_reduce.conv.bias: copying a param with shape torch.Size([10]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.6._se_expand.conv.weight: copying a param with shape torch.Size([240, 10, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._se_expand.conv.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.6._project_conv.conv.weight: copying a param with shape torch.Size([40, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.6._bn2.weight: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.bias: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.running_mean: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.6._bn2.running_var: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._expand_conv.conv.weight: copying a param with shape torch.Size([240, 40, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._bn0.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn0.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._depthwise_conv.conv.weight: copying a param with shape torch.Size([240, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([480, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.7._bn1.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._bn1.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._se_reduce.conv.weight: copying a param with shape torch.Size([10, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._se_reduce.conv.bias: copying a param with shape torch.Size([10]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.7._se_expand.conv.weight: copying a param with shape torch.Size([240, 10, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._se_expand.conv.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.7._project_conv.conv.weight: copying a param with shape torch.Size([40, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([80, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.7._bn2.weight: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.bias: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.running_mean: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.7._bn2.running_var: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([80]).
	size mismatch for backbone_net.model._blocks.8._expand_conv.conv.weight: copying a param with shape torch.Size([240, 40, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 80, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._bn0.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn0.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._depthwise_conv.conv.weight: copying a param with shape torch.Size([240, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([480, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.8._bn1.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._bn1.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._se_reduce.conv.weight: copying a param with shape torch.Size([10, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([20, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._se_reduce.conv.bias: copying a param with shape torch.Size([10]) from checkpoint, the shape in current model is torch.Size([20]).
	size mismatch for backbone_net.model._blocks.8._se_expand.conv.weight: copying a param with shape torch.Size([240, 10, 1, 1]) from checkpoint, the shape in current model is torch.Size([480, 20, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._se_expand.conv.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([480]).
	size mismatch for backbone_net.model._blocks.8._project_conv.conv.weight: copying a param with shape torch.Size([40, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 480, 1, 1]).
	size mismatch for backbone_net.model._blocks.8._bn2.weight: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.bias: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.running_mean: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.8._bn2.running_var: copying a param with shape torch.Size([40]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._expand_conv.conv.weight: copying a param with shape torch.Size([240, 40, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._bn0.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn0.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._depthwise_conv.conv.weight: copying a param with shape torch.Size([240, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.9._bn1.weight: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.running_mean: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._bn1.running_var: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._se_reduce.conv.weight: copying a param with shape torch.Size([10, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._se_reduce.conv.bias: copying a param with shape torch.Size([10]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.9._se_expand.conv.weight: copying a param with shape torch.Size([240, 10, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._se_expand.conv.bias: copying a param with shape torch.Size([240]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.9._project_conv.conv.weight: copying a param with shape torch.Size([72, 240, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.9._bn2.weight: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.bias: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.running_mean: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.9._bn2.running_var: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._expand_conv.conv.weight: copying a param with shape torch.Size([432, 72, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._bn0.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn0.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._depthwise_conv.conv.weight: copying a param with shape torch.Size([432, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.10._bn1.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._bn1.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._se_reduce.conv.weight: copying a param with shape torch.Size([18, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._se_reduce.conv.bias: copying a param with shape torch.Size([18]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.10._se_expand.conv.weight: copying a param with shape torch.Size([432, 18, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._se_expand.conv.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.10._project_conv.conv.weight: copying a param with shape torch.Size([72, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([112, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.10._bn2.weight: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.bias: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.running_mean: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.10._bn2.running_var: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([112]).
	size mismatch for backbone_net.model._blocks.11._expand_conv.conv.weight: copying a param with shape torch.Size([432, 72, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 112, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._bn0.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn0.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._depthwise_conv.conv.weight: copying a param with shape torch.Size([432, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([672, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.11._bn1.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._bn1.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._se_reduce.conv.weight: copying a param with shape torch.Size([18, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([28, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._se_reduce.conv.bias: copying a param with shape torch.Size([18]) from checkpoint, the shape in current model is torch.Size([28]).
	size mismatch for backbone_net.model._blocks.11._se_expand.conv.weight: copying a param with shape torch.Size([432, 18, 1, 1]) from checkpoint, the shape in current model is torch.Size([672, 28, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._se_expand.conv.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([672]).
	size mismatch for backbone_net.model._blocks.11._project_conv.conv.weight: copying a param with shape torch.Size([72, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 672, 1, 1]).
	size mismatch for backbone_net.model._blocks.11._bn2.weight: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.bias: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.running_mean: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.11._bn2.running_var: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._expand_conv.conv.weight: copying a param with shape torch.Size([432, 72, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._bn0.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn0.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._depthwise_conv.conv.weight: copying a param with shape torch.Size([432, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.12._bn1.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._bn1.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._se_reduce.conv.weight: copying a param with shape torch.Size([18, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._se_reduce.conv.bias: copying a param with shape torch.Size([18]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.12._se_expand.conv.weight: copying a param with shape torch.Size([432, 18, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._se_expand.conv.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.12._project_conv.conv.weight: copying a param with shape torch.Size([72, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.12._bn2.weight: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.bias: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.running_mean: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.12._bn2.running_var: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._expand_conv.conv.weight: copying a param with shape torch.Size([432, 72, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._bn0.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn0.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._depthwise_conv.conv.weight: copying a param with shape torch.Size([432, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.13._bn1.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._bn1.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._se_reduce.conv.weight: copying a param with shape torch.Size([18, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._se_reduce.conv.bias: copying a param with shape torch.Size([18]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.13._se_expand.conv.weight: copying a param with shape torch.Size([432, 18, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._se_expand.conv.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.13._project_conv.conv.weight: copying a param with shape torch.Size([72, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.13._bn2.weight: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.bias: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.running_mean: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.13._bn2.running_var: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._expand_conv.conv.weight: copying a param with shape torch.Size([432, 72, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._bn0.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn0.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._depthwise_conv.conv.weight: copying a param with shape torch.Size([432, 1, 5, 5]) from checkpoint, the shape in current model is torch.Size([1152, 1, 5, 5]).
	size mismatch for backbone_net.model._blocks.14._bn1.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._bn1.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._se_reduce.conv.weight: copying a param with shape torch.Size([18, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._se_reduce.conv.bias: copying a param with shape torch.Size([18]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.14._se_expand.conv.weight: copying a param with shape torch.Size([432, 18, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._se_expand.conv.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.14._project_conv.conv.weight: copying a param with shape torch.Size([72, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([192, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.14._bn2.weight: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.bias: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.running_mean: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.14._bn2.running_var: copying a param with shape torch.Size([72]) from checkpoint, the shape in current model is torch.Size([192]).
	size mismatch for backbone_net.model._blocks.15._expand_conv.conv.weight: copying a param with shape torch.Size([432, 72, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 192, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._bn0.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn0.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._depthwise_conv.conv.weight: copying a param with shape torch.Size([432, 1, 3, 3]) from checkpoint, the shape in current model is torch.Size([1152, 1, 3, 3]).
	size mismatch for backbone_net.model._blocks.15._bn1.weight: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.running_mean: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._bn1.running_var: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._se_reduce.conv.weight: copying a param with shape torch.Size([18, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([48, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._se_reduce.conv.bias: copying a param with shape torch.Size([18]) from checkpoint, the shape in current model is torch.Size([48]).
	size mismatch for backbone_net.model._blocks.15._se_expand.conv.weight: copying a param with shape torch.Size([432, 18, 1, 1]) from checkpoint, the shape in current model is torch.Size([1152, 48, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._se_expand.conv.bias: copying a param with shape torch.Size([432]) from checkpoint, the shape in current model is torch.Size([1152]).
	size mismatch for backbone_net.model._blocks.15._project_conv.conv.weight: copying a param with shape torch.Size([144, 432, 1, 1]) from checkpoint, the shape in current model is torch.Size([320, 1152, 1, 1]).
	size mismatch for backbone_net.model._blocks.15._bn2.weight: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.bias: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.running_mean: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([320]).
	size mismatch for backbone_net.model._blocks.15._bn2.running_var: copying a param with shape torch.Size([144]) from checkpoint, the shape in current model is torch.Size([320]).
[Warning] Don't panic if you see this, this might be because you load a pretrained weights with different number of classes. The rest of the weights should be loaded already.
[Info] loaded weights: efficientdet-d7.pth, resuming checkpoint from step: 0
[Info] freezed backbone
Step: 45. Epoch: 0/30. Iteration: 46/46. Cls loss: 178.68282. Reg loss: 6.25764.
Val. Epoch: 0/30. Classification loss: 197.07198. Regression loss: 4.69033. Total loss: 201.76230
Step: 91. Epoch: 1/30. Iteration: 46/46. Cls loss: 157.47488. Reg loss: 4.85722.
Val. Epoch: 1/30. Classification loss: 190.44374. Regression loss: 4.63593. Total loss: 195.07967
Step: 137. Epoch: 2/30. Iteration: 46/46. Cls loss: 121.35225. Reg loss: 4.31800
Val. Epoch: 2/30. Classification loss: 178.22523. Regression loss: 4.56711. Total loss: 182.79234
Step: 149. Epoch: 3/30. Iteration: 12/46. Cls loss: 119.59480. Reg loss: 4.39473checkpoint...
Step: 183. Epoch: 3/30. Iteration: 46/46. Cls loss: 85.55176. Reg loss: 4.04655.
Val. Epoch: 3/30. Classification loss: 157.71216. Regression loss: 4.48355. Total loss: 162.19570
Step: 229. Epoch: 4/30. Iteration: 46/46. Cls loss: 51.83519. Reg loss: 3.74541.
Val. Epoch: 4/30. Classification loss: 128.02173. Regression loss: 4.39388. Total loss: 132.41561
Step: 275. Epoch: 5/30. Iteration: 46/46. Cls loss: 34.62713. Reg loss: 3.48569.
Val. Epoch: 5/30. Classification loss: 91.95965. Regression loss: 4.26431. Total loss: 96.22396
Step: 299. Epoch: 6/30. Iteration: 24/46. Cls loss: 28.37268. Reg loss: 3.73267.checkpoint...
Step: 321. Epoch: 6/30. Iteration: 46/46. Cls loss: 19.59552. Reg loss: 3.27532.
Val. Epoch: 6/30. Classification loss: 58.06846. Regression loss: 4.04417. Total loss: 62.11263
Step: 367. Epoch: 7/30. Iteration: 46/46. Cls loss: 12.96580. Reg loss: 3.35529.
Val. Epoch: 7/30. Classification loss: 32.68897. Regression loss: 3.73999. Total loss: 36.42895
Step: 413. Epoch: 8/30. Iteration: 46/46. Cls loss: 8.97517. Reg loss: 3.27766. 
Val. Epoch: 8/30. Classification loss: 16.77833. Regression loss: 3.46221. Total loss: 20.24054
Step: 449. Epoch: 9/30. Iteration: 36/46. Cls loss: 6.67025. Reg loss: 2.77337. checkpoint...
Step: 459. Epoch: 9/30. Iteration: 46/46. Cls loss: 6.70988. Reg loss: 2.98813. 
Val. Epoch: 9/30. Classification loss: 10.41356. Regression loss: 3.27153. Total loss: 13.68509
Step: 505. Epoch: 10/30. Iteration: 46/46. Cls loss: 4.73172. Reg loss: 2.59303.
Val. Epoch: 10/30. Classification loss: 5.88347. Regression loss: 3.03521. Total loss: 8.91869
Step: 551. Epoch: 11/30. Iteration: 46/46. Cls loss: 3.83280. Reg loss: 3.10371.
Val. Epoch: 11/30. Classification loss: 4.11103. Regression loss: 2.85871. Total loss: 6.96974
Step: 597. Epoch: 12/30. Iteration: 46/46. Cls loss: 3.04594. Reg loss: 3.19856.
Val. Epoch: 12/30. Classification loss: 3.02435. Regression loss: 2.76361. Total loss: 5.78795
Step: 599. Epoch: 13/30. Iteration: 2/46. Cls loss: 3.13152. Reg loss: 3.26277. checkpoint...
Step: 643. Epoch: 13/30. Iteration: 46/46. Cls loss: 2.52817. Reg loss: 2.64640.
Val. Epoch: 13/30. Classification loss: 2.54655. Regression loss: 2.69278. Total loss: 5.23934
Step: 689. Epoch: 14/30. Iteration: 46/46. Cls loss: 2.58572. Reg loss: 3.26035.
Val. Epoch: 14/30. Classification loss: 2.25725. Regression loss: 2.65584. Total loss: 4.91309
Step: 735. Epoch: 15/30. Iteration: 46/46. Cls loss: 2.02040. Reg loss: 3.18524.
Val. Epoch: 15/30. Classification loss: 2.05656. Regression loss: 2.65898. Total loss: 4.71554
Step: 749. Epoch: 16/30. Iteration: 14/46. Cls loss: 2.07775. Reg loss: 3.26101.checkpoint...
Step: 781. Epoch: 16/30. Iteration: 46/46. Cls loss: 1.52646. Reg loss: 2.63678.
Val. Epoch: 16/30. Classification loss: 1.68331. Regression loss: 2.64993. Total loss: 4.33324
Step: 827. Epoch: 17/30. Iteration: 46/46. Cls loss: 1.53947. Reg loss: 2.90290.
Val. Epoch: 17/30. Classification loss: 1.47221. Regression loss: 2.64929. Total loss: 4.12149
Step: 873. Epoch: 18/30. Iteration: 46/46. Cls loss: 1.33587. Reg loss: 2.89785.
Val. Epoch: 18/30. Classification loss: 1.40638. Regression loss: 2.64267. Total loss: 4.04904
Step: 899. Epoch: 19/30. Iteration: 26/46. Cls loss: 1.17774. Reg loss: 2.67117.checkpoint...
Step: 919. Epoch: 19/30. Iteration: 46/46. Cls loss: 1.19514. Reg loss: 3.02948.
Val. Epoch: 19/30. Classification loss: 1.17642. Regression loss: 2.64517. Total loss: 3.82159
Step: 965. Epoch: 20/30. Iteration: 46/46. Cls loss: 1.05019. Reg loss: 3.11715.
Val. Epoch: 20/30. Classification loss: 1.05794. Regression loss: 2.63006. Total loss: 3.68800
Step: 1011. Epoch: 21/30. Iteration: 46/46. Cls loss: 1.07946. Reg loss: 3.08551
Val. Epoch: 21/30. Classification loss: 0.96962. Regression loss: 2.63166. Total loss: 3.60128
Step: 1049. Epoch: 22/30. Iteration: 38/46. Cls loss: 0.86562. Reg loss: 2.83792checkpoint...
Step: 1057. Epoch: 22/30. Iteration: 46/46. Cls loss: 0.83572. Reg loss: 2.28394
Val. Epoch: 22/30. Classification loss: 0.89310. Regression loss: 2.62059. Total loss: 3.51369
Step: 1103. Epoch: 23/30. Iteration: 46/46. Cls loss: 0.79503. Reg loss: 2.17414
Val. Epoch: 23/30. Classification loss: 0.84807. Regression loss: 2.60945. Total loss: 3.45753
Step: 1149. Epoch: 24/30. Iteration: 46/46. Cls loss: 0.75895. Reg loss: 2.81039
Val. Epoch: 24/30. Classification loss: 0.77217. Regression loss: 2.61030. Total loss: 3.38247
Step: 1195. Epoch: 25/30. Iteration: 46/46. Cls loss: 0.76448. Reg loss: 3.48859
Val. Epoch: 25/30. Classification loss: 0.70728. Regression loss: 2.59955. Total loss: 3.30683
Step: 1199. Epoch: 26/30. Iteration: 4/46. Cls loss: 0.71389. Reg loss: 2.51051.checkpoint...
Step: 1241. Epoch: 26/30. Iteration: 46/46. Cls loss: 0.68395. Reg loss: 2.71831
Val. Epoch: 26/30. Classification loss: 0.69241. Regression loss: 2.60273. Total loss: 3.29514
Step: 1287. Epoch: 27/30. Iteration: 46/46. Cls loss: 0.63972. Reg loss: 2.69108
Val. Epoch: 27/30. Classification loss: 0.64056. Regression loss: 2.59474. Total loss: 3.23530
Step: 1333. Epoch: 28/30. Iteration: 46/46. Cls loss: 0.58458. Reg loss: 2.14434
Val. Epoch: 28/30. Classification loss: 0.62464. Regression loss: 2.58722. Total loss: 3.21186
Step: 1349. Epoch: 29/30. Iteration: 16/46. Cls loss: 0.58993. Reg loss: 3.05536checkpoint...
Step: 1379. Epoch: 29/30. Iteration: 46/46. Cls loss: 0.57845. Reg loss: 2.59693
Val. Epoch: 29/30. Classification loss: 0.57046. Regression loss: 2.57652. Total loss: 3.14697
In [4]:
%cd logs/cadod
weight_file = !ls -Art | grep efficientdet
%cd ../..
[Errno 2] No such file or directory: 'logs/cadod'
/N/home/u090/svtranga/Carbonate/Downloads
/N/home/u090/svtranga
In [23]:
#uncomment the next line to specify a weight file
weight_file = 'efficientdet-d0_29_1350.pth'

! python coco_eval.py -c 0 -p cadod -w "{weight_file}"
running coco-style evaluation on project cadod, weights efficientdet-d0_29_1350.pth...
loading annotations into memory...
Done (t=0.00s)
creating index...
index created!
100%|█████████████████████████████████████████| 500/500 [29:09<00:00,  3.50s/it]
Loading and preparing results...
DONE (t=15.10s)
creating index...
index created!
BBox
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=7.74s).
Accumulating evaluation results...
DONE (t=0.69s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.178
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.476
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.108
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.108
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.212
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.446
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.499
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.511
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.349
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.570
In [20]:
import os
os.getcwd()
#os.chdir('/N/u/svtranga/Carbonate/Downloads/')
Out[20]:
'/N/home/u090/svtranga/Carbonate/Downloads'

Visualizing the predicted output

In [24]:
import torch
from torch import nn

from efficientdet.model import BiFPN, Regressor, Classifier, EfficientNet
from efficientdet.utils import Anchors


class EfficientDetBackbone(nn.Module):
    def __init__(self, num_classes=80, compound_coef=0, load_weights=False, **kwargs):
        super(EfficientDetBackbone, self).__init__()
        self.compound_coef = compound_coef

        self.backbone_compound_coef = [0, 1, 2, 3, 4, 5, 6, 6, 7]
        self.fpn_num_filters = [64, 88, 112, 160, 224, 288, 384, 384, 384]
        self.fpn_cell_repeats = [3, 4, 5, 6, 7, 7, 8, 8, 8]
        self.input_sizes = [512, 640, 768, 896, 1024, 1280, 1280, 1536, 1536]
        self.box_class_repeats = [3, 3, 3, 4, 4, 4, 5, 5, 5]
        self.pyramid_levels = [5, 5, 5, 5, 5, 5, 5, 5, 6]
        self.anchor_scale = [4., 4., 4., 4., 4., 4., 4., 5., 4.]
        self.aspect_ratios = kwargs.get('ratios', [(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)])
        self.num_scales = len(kwargs.get('scales', [2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]))
        conv_channel_coef = {
            # the channels of P3/P4/P5.
            0: [40, 112, 320],
            1: [40, 112, 320],
            2: [48, 120, 352],
            3: [48, 136, 384],
            4: [56, 160, 448],
            5: [64, 176, 512],
            6: [72, 200, 576],
            7: [72, 200, 576],
            8: [80, 224, 640],
        }

        num_anchors = len(self.aspect_ratios) * self.num_scales

        self.bifpn = nn.Sequential(
            *[BiFPN(self.fpn_num_filters[self.compound_coef],
                    conv_channel_coef[compound_coef],
                    True if _ == 0 else False,
                    attention=True if compound_coef < 6 else False,
                    use_p8=compound_coef > 7)
              for _ in range(self.fpn_cell_repeats[compound_coef])])

        self.num_classes = num_classes
        self.regressor = Regressor(in_channels=self.fpn_num_filters[self.compound_coef], num_anchors=num_anchors,
                                   num_layers=self.box_class_repeats[self.compound_coef],
                                   pyramid_levels=self.pyramid_levels[self.compound_coef])
        self.classifier = Classifier(in_channels=self.fpn_num_filters[self.compound_coef], num_anchors=num_anchors,
                                     num_classes=num_classes,
                                     num_layers=self.box_class_repeats[self.compound_coef],
                                     pyramid_levels=self.pyramid_levels[self.compound_coef])

        self.anchors = Anchors(anchor_scale=self.anchor_scale[compound_coef],
                               pyramid_levels=(torch.arange(self.pyramid_levels[self.compound_coef]) + 3).tolist(),
                               **kwargs)

        self.backbone_net = EfficientNet(self.backbone_compound_coef[compound_coef], load_weights)

    def freeze_bn(self):
        for m in self.modules():
            if isinstance(m, nn.BatchNorm2d):
                m.eval()

    def forward(self, inputs):
        max_size = inputs.shape[-1]

        _, p3, p4, p5 = self.backbone_net(inputs)

        features = (p3, p4, p5)
        features = self.bifpn(features)

        regression = self.regressor(features)
        classification = self.classifier(features)
        anchors = self.anchors(inputs, inputs.dtype)

        return features, regression, classification, anchors

    def init_backbone(self, path):
        state_dict = torch.load(path)
        try:
            ret = self.load_state_dict(state_dict, strict=False)
            print(ret)
        except RuntimeError as e:
            print('Ignoring ' + str(e) + '"')
In [34]:
import torch
from torch.backends import cudnn

#from backbone import EfficientDetBackbone
import cv2
import matplotlib.pyplot as plt
import numpy as np

from efficientdet.utils import BBoxTransform, ClipBoxes
from utils.utils import preprocess, invert_affine, postprocess

compound_coef = 0
force_input_size = None  # set None to use default size
img_path = 'datasets/cadod/val/1b798f26f1fa0229.jpg'

threshold = 0.2
iou_threshold = 0.2

use_cuda = True
use_float16 = False
cudnn.fastest = True
cudnn.benchmark = True

obj_list = [ 'dog', 'cat' ]

# tf bilinear interpolation is different from any other's, just make do
input_sizes = [512, 640, 768, 896, 1024, 1280, 1280, 1536]
input_size = input_sizes[compound_coef] if force_input_size is None else force_input_size
ori_imgs, framed_imgs, framed_metas = preprocess(img_path, max_size=input_size)

# if use_cuda:
#     x = torch.stack([torch.from_numpy(fi).cuda() for fi in framed_imgs], 0)
# else:
x = torch.stack([torch.from_numpy(fi) for fi in framed_imgs], 0)

x = x.to(torch.float32 if not use_float16 else torch.float16).permute(0, 3, 1, 2)

model = EfficientDetBackbone(compound_coef=compound_coef, num_classes=len(obj_list),

                             # replace this part with your project's anchor config
                             ratios=[(0.7, 1.4), (1.0, 1.0), (1.5, 0.7)],
                             scales=[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)])

model.load_state_dict(torch.load('logs/cadod/'+weight_file))
model.requires_grad_(False)
model.eval()

# if use_cuda:
#     model = model.cuda()
if use_float16:
    model = model.half()

with torch.no_grad():
    features, regression, classification, anchors = model(x)

    regressBoxes = BBoxTransform()
    clipBoxes = ClipBoxes()

    out = postprocess(x,
                      anchors, regression, classification,
                      regressBoxes, clipBoxes,
                      threshold, iou_threshold)

out = invert_affine(framed_metas, out)

for i in range(len(ori_imgs)):
    if len(out[i]['rois']) == 0:
        continue
    ori_imgs[i] = ori_imgs[i].copy()
    for j in range(len(out[i]['rois'])):
        (x1, y1, x2, y2) = out[i]['rois'][j].astype(np.int)
        cv2.rectangle(ori_imgs[i], (x1, y1), (x2, y2), (255, 255, 0), 2)
        obj = obj_list[out[i]['class_ids'][j]]
        score = float(out[i]['scores'][j])

        cv2.putText(ori_imgs[i], '{}, {:.3f}'.format(obj, score),
                    (x1, y1 + 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                    (255, 255, 0), 1)
        plt.show()
        plt.imshow(ori_imgs[i]);
        plt.show()
        break;

Results and Discussion

image.png

Evaluation of EfficientDet

  • MAP (Mean Average Precision) -

    • Precision is the ratio of true positives to all predicted positives

    • Precision = True positives / (True positives + False positives)

  • IoU – Intersection over Union

    • This gives the overlap between the true boundary and predicted boundary

Difference between D0 and D7

  • EfficientDet = BiFPN + Compound Scaling for better accuracy and efficiency across wide variety resource constraints

  • D7 requires a greater number of compound scaling and hence requires more epoch to converge then D0

  • In our case, the mAP did not increase due to the lack of time in training the D7 model for higher epochs

Fully Convolutional Neural Network:

image.png

Classification:

  • We have split the data into train, validation, and test and used 30 epochs to help in the convergence process

  • For image detection, we have used 2 Conv2D layers, 2 maxpool layer and one output layer.

  • ReLU has been used as the activation function and cross-entropy is the loss function.

  • In addition to this, we have experimented with dropout layers.

  • Drop out layer of 0.1 yielded us a model with better accuracy

  • We are using Adam optimizer as an optimizer for convergence

Regression:

  • We have split the data into train, validation, and tests and used 50 epochs to help in the convergence process

  • We have used 3 fully connected neural networks to train our model

  • We have used ReLU as our activation function

  • Mean square is our loss function and we have experimented using stochastic gradient descent and adam as an optimizer for convergence

  • Adam was used as it gave us a better model

Fully Convolutional Neural Network

In [1]:
import pandas as pd
import numpy as np
from sklearn.metrics import classification_report, confusion_matrix
from torch.optim import Adam
import matplotlib.pyplot as plt
import seaborn as sns
In [2]:
# Setting seeds to try and ensure we have the same results - this is not guaranteed across PyTorch releases.
import torch
torch.manual_seed(0)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
In [3]:
import torch.nn as nn
import torch.nn.functional as F
from torchvision import datasets, transforms, models
from torch.utils.data import DataLoader, SubsetRandomSampler
import random
from os import listdir
from shutil import copyfile
In [4]:
import tensorflow as tf 
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from os import makedirs
In [5]:
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
device
Out[5]:
device(type='cpu')

from google.colab import drive drive.mount('/content/drive')

!ls "/content/drive/My Drive/Colab Notebooks"

In [6]:
random.seed(42)
X = np.load('data/img.npy', allow_pickle=True)
y_label = np.load('data/y_label.npy', allow_pickle=True)
y_bbox = np.load('data/y_bbox.npy', allow_pickle=True)
In [7]:
print(X.shape, y_label.shape)
(12966, 49152) (12966,)
In [8]:
#creating directories for test and train data set
dataset_home = 'cat_vs_dog/'
subdirs = ['train/', 'test/']
for subdir in subdirs:
	# create label subdirectories
	labeldirs = ['dogs/', 'cats/']
	for labldir in labeldirs:
		newdir = dataset_home + subdir + labldir
		makedirs(newdir, exist_ok=True)
In [ ]:
 
In [9]:
#load the csv file
df = pd.read_csv("cadod.csv")
df.head()
Out[9]:
ImageID Source LabelName Confidence XMin XMax YMin YMax IsOccluded IsTruncated ... IsDepiction IsInside XClick1X XClick2X XClick3X XClick4X XClick1Y XClick2Y XClick3Y XClick4Y
0 0000b9fcba019d36 xclick /m/0bt9lr 1 0.165000 0.903750 0.268333 0.998333 1 1 ... 0 0 0.636250 0.903750 0.748750 0.165000 0.268333 0.506667 0.998333 0.661667
1 0000cb13febe0138 xclick /m/0bt9lr 1 0.000000 0.651875 0.000000 0.999062 1 1 ... 0 0 0.312500 0.000000 0.317500 0.651875 0.000000 0.410882 0.999062 0.999062
2 0005a9520eb22c19 xclick /m/0bt9lr 1 0.094167 0.611667 0.055626 0.998736 1 1 ... 0 0 0.487500 0.611667 0.243333 0.094167 0.055626 0.226296 0.998736 0.305942
3 0006303f02219b07 xclick /m/0bt9lr 1 0.000000 0.999219 0.000000 0.998824 1 1 ... 0 0 0.508594 0.999219 0.000000 0.478906 0.000000 0.375294 0.720000 0.998824
4 00064d23bf997652 xclick /m/0bt9lr 1 0.240938 0.906183 0.000000 0.694286 0 0 ... 0 0 0.678038 0.906183 0.240938 0.522388 0.000000 0.370000 0.424286 0.694286

5 rows × 21 columns

In [10]:
df.LabelName.replace({'/m/01yrx':'cat', '/m/0bt9lr':'dog'}, inplace=True)
In [11]:
df.head()
Out[11]:
ImageID Source LabelName Confidence XMin XMax YMin YMax IsOccluded IsTruncated ... IsDepiction IsInside XClick1X XClick2X XClick3X XClick4X XClick1Y XClick2Y XClick3Y XClick4Y
0 0000b9fcba019d36 xclick dog 1 0.165000 0.903750 0.268333 0.998333 1 1 ... 0 0 0.636250 0.903750 0.748750 0.165000 0.268333 0.506667 0.998333 0.661667
1 0000cb13febe0138 xclick dog 1 0.000000 0.651875 0.000000 0.999062 1 1 ... 0 0 0.312500 0.000000 0.317500 0.651875 0.000000 0.410882 0.999062 0.999062
2 0005a9520eb22c19 xclick dog 1 0.094167 0.611667 0.055626 0.998736 1 1 ... 0 0 0.487500 0.611667 0.243333 0.094167 0.055626 0.226296 0.998736 0.305942
3 0006303f02219b07 xclick dog 1 0.000000 0.999219 0.000000 0.998824 1 1 ... 0 0 0.508594 0.999219 0.000000 0.478906 0.000000 0.375294 0.720000 0.998824
4 00064d23bf997652 xclick dog 1 0.240938 0.906183 0.000000 0.694286 0 0 ... 0 0 0.678038 0.906183 0.240938 0.522388 0.000000 0.370000 0.424286 0.694286

5 rows × 21 columns

In [12]:
dog_list = df[df.LabelName == 'dog']['ImageID']
cat_list = df[df.LabelName == 'cat']['ImageID']
#list(dog_list)
In [13]:
# moving images to test and train folder

random.seed(10)
# define ratio of pictures to use for test
test_ratio = 0.20
count_c = 0
count_d = 0

# copy training dataset images into subdirectories
src_directory = 'cadod/'
for file in listdir(src_directory):
    #print(file.replace('.jpg','').replace('._','') in list(cat_list))
    #print(file.replace('.jpg','').replace('._','') in list(dog_list))
    src = src_directory + '/' + file
    dst_dir = 'train/'
    if random.random() < test_ratio:
        dst_dir = 'test/'
    if file.replace('.jpg','').replace('._','') in list(cat_list) and count_c < 2000:
        dst = dataset_home + dst_dir + 'cats/'  + file
        count_c +=1
        copyfile(src, dst)
    elif file.replace('.jpg','').replace('._','') in list(dog_list) and count_d < 2000:
        dst = dataset_home + dst_dir + 'dogs/'  + file
        count_d +=1
        copyfile(src, dst)
In [8]:
from tensorflow.keras import models
from tensorflow.keras.applications import *
from tensorflow.keras import layers

Training FCN

Image classification

In [10]:
expLog = pd.DataFrame(columns=["exp_name", 
                               "Train Acc", 
                               "Valid Acc",
                               "Test  Acc",
                              ])
In [13]:
dataset_size
Out[13]:
800
In [14]:
train_set, val_set = torch.utils.data.random_split(train_it, [600, 200]) 
In [15]:
#splitting data into train, validation and test
trainloader = DataLoader(train_set, batch_size=64, shuffle=True)
valloader = DataLoader(val_set, shuffle=True, batch_size=16)
testloader = DataLoader(test_it, batch_size=32, shuffle=True)
In [16]:
for images, labels in trainloader:
    print(images.size(), labels.size())
    print(labels)
    break
torch.Size([64, 3, 128, 128]) torch.Size([64])
tensor([1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0,
        0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0,
        1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0])
In [47]:
from torch.utils.tensorboard import SummaryWriter
import numpy as np

writer = SummaryWriter()

With Data Augmentation

In [36]:
#Data augmentation
mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225]

transform_test = transforms.Compose([
    #transforms.ToPILImage(),             
    transforms.Resize((128, 128)),
    transforms.ToTensor(),
    transforms.Normalize(mean=mean, std=std)
    ])
transform_train = transforms.Compose([
    #transforms.ToPILImage(),             
    transforms.Resize((128, 128)),
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(40),
    transforms.ToTensor(),
    transforms.Normalize(mean=mean, std=std)
    #transforms.RandomAutocontrast()
    
    ])
In [37]:
train_it = datasets.ImageFolder('cat_vs_dog/train/', transform=transform_train)
test_it = datasets.ImageFolder('cat_vs_dog/test/', transform=transform_test)

dataset_size = len(train_it)
dataset_indices = list(range(dataset_size))
np.random.shuffle(dataset_indices)
In [38]:
dataset_size
Out[38]:
800
In [39]:
train_set, val_set = torch.utils.data.random_split(train_it, [700, 100]) 
In [40]:
trainloader = DataLoader(train_set, batch_size=54, shuffle=True)
valloader = DataLoader(val_set, shuffle=True, batch_size=16)
testloader = DataLoader(test_it, batch_size=16, shuffle=True)
In [41]:
for images, labels in trainloader:
    print(images.size(), labels.size())
    print(labels)
    break
torch.Size([54, 3, 128, 128]) torch.Size([54])
tensor([1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,
        0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0,
        1, 0, 1, 0, 1, 0])
In [42]:
for batch, (images, labels) in enumerate(trainloader,1):
    print(sum(labels))
    break
tensor(19)

Training using Drop out value of 0.1

In [43]:
#defining neural network layers
class cadod(nn.Module): 
    def __init__(self):
        super(cadod, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=10, kernel_size=3)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=3)
        self.conv2_drop = nn.Dropout2d(0.1)
        self.fc1 = nn.Linear(18000, 400)
        self.fc2 = nn.Linear(400, 2)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return x

model = cadod()
criterion = nn.CrossEntropyLoss() #Loss function
optimizer = torch.optim.Adam(model.parameters(), lr=0.0002, weight_decay = 0.0001) #optimizer with learning rate of 0.0002
#scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones = [500,1000,1500], gamma = 0.5)
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones = [500,1000,1500], gamma = 0.5)
In [84]:
rm -rf logs
In [85]:
accuracy_stats = {
    'train': [],
    "val": []
}
loss_stats = {
    'train': [],
    "val": []
}
In [78]:
import datetime
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
In [88]:
model = model.to(device)
#optimizer = Adam(filter(lambda p: p.requires_grad, model.parameters()))

num_epochs = 75


for e in range(num_epochs):
    cum_epoch_loss = 0
    cum_acc = 0
    batch_loss = 0
    model.train()
    for batch, (images, labels) in enumerate(trainloader,1):
    #print(labels)
    #print(images.shape)
        images = images.to(device)
        labels = labels.to(device)
        optimizer.zero_grad()
        label_pred = model(images).squeeze()
        #print(logps)
        #break;
        #labels = labels.unsqueeze(1)
        loss = criterion(label_pred, labels)
        acc = binary_acc(label_pred, labels)
        loss.backward()
        optimizer.step()
        batch_loss += loss.item()
        cum_acc += acc.item()
        scheduler.step()
        #print(f'Epoch({e}/{num_epochs} : Batch number({batch}/{len(trainloader)})')
    
    with torch.no_grad():
        model.eval()
        val_epoch_loss = 0
        val_epoch_acc = 0
        for batch, (X_val_batch, y_val_batch) in enumerate(valloader,1):
            X_val_batch, y_val_batch = X_val_batch.to(device), y_val_batch.to(device)            
            y_val_pred = model(X_val_batch).squeeze()
            #y_val_pred = torch.unsqueeze(y_val_pred, 0)            
            val_loss = criterion(y_val_pred, y_val_batch)
            val_acc = binary_acc(y_val_pred, y_val_batch)            
            val_epoch_loss += val_loss.item()
            val_epoch_acc += val_acc.item()
        #print(f'Epoch({e}/{num_epochs} : Train loss : {loss.item()} : Train Accuracy : {acc.item()} : Valid loss : {val_loss.item()} : Valid Accuracy : {val_acc.item()}')
    
    loss_stats['train'].append(batch_loss/len(trainloader))
    loss_stats['val'].append(val_epoch_loss/len(valloader))
    accuracy_stats['train'].append(cum_acc/len(trainloader))
    accuracy_stats['val'].append(val_epoch_acc/len(valloader))
    
    print(f'Epoch({e}/{num_epochs})')
    print(f'Training loss : {batch_loss/len(trainloader)}')  
    print(f'Training accuracy : {cum_acc/len(trainloader)}')  
    print(f'Validation loss : {val_epoch_loss/len(valloader)}')  
    print(f'Validation accuracy : {val_epoch_acc/len(valloader)}') 
    #For tensorboard
    writer.add_scalars('Loss', {'Training Loss': batch_loss/len(trainloader),
                      'Validation Loss': val_epoch_loss/len(valloader),}, e)
    writer.add_scalars('Accuracy', {'Accuracy/train': cum_acc/len(trainloader),
                                   'Accuracy/validation': val_epoch_acc/len(valloader),}, e)
writer.close()
    
Epoch(0/75)
Training loss : 0.544224154490691
Training accuracy : 71.76923076923077
Validation loss : 0.6337249747344426
Validation accuracy : 67.85714285714286
Epoch(1/75)
Training loss : 0.5392464605661539
Training accuracy : 73.07692307692308
Validation loss : 0.6167629616601127
Validation accuracy : 65.85714285714286
Epoch(2/75)
Training loss : 0.531979888677597
Training accuracy : 74.53846153846153
Validation loss : 0.6279235354491642
Validation accuracy : 66.0
Epoch(3/75)
Training loss : 0.5479319003912119
Training accuracy : 71.0
Validation loss : 0.6425893519605909
Validation accuracy : 63.285714285714285
Epoch(4/75)
Training loss : 0.5392648348441491
Training accuracy : 72.23076923076923
Validation loss : 0.7222450375556946
Validation accuracy : 59.857142857142854
Epoch(5/75)
Training loss : 0.5442544863774226
Training accuracy : 71.53846153846153
Validation loss : 0.6605538470404488
Validation accuracy : 64.28571428571429
Epoch(6/75)
Training loss : 0.5323097591216748
Training accuracy : 74.15384615384616
Validation loss : 0.68761317219053
Validation accuracy : 58.0
Epoch(7/75)
Training loss : 0.5457858741283417
Training accuracy : 71.23076923076923
Validation loss : 0.6404625347682408
Validation accuracy : 64.28571428571429
Epoch(8/75)
Training loss : 0.5224738258581895
Training accuracy : 74.76923076923077
Validation loss : 0.644223017351968
Validation accuracy : 66.85714285714286
Epoch(9/75)
Training loss : 0.5394229888916016
Training accuracy : 73.23076923076923
Validation loss : 0.7207042660032
Validation accuracy : 59.0
Epoch(10/75)
Training loss : 0.5428714889746445
Training accuracy : 72.46153846153847
Validation loss : 0.6735125524657113
Validation accuracy : 64.28571428571429
Epoch(11/75)
Training loss : 0.5467189160677103
Training accuracy : 71.6923076923077
Validation loss : 0.6584447537149701
Validation accuracy : 63.57142857142857
Epoch(12/75)
Training loss : 0.5321629139093252
Training accuracy : 73.23076923076923
Validation loss : 0.658014348575047
Validation accuracy : 54.285714285714285
Epoch(13/75)
Training loss : 0.5289529195198646
Training accuracy : 73.53846153846153
Validation loss : 0.63898766040802
Validation accuracy : 63.42857142857143
Epoch(14/75)
Training loss : 0.5194140443435082
Training accuracy : 73.61538461538461
Validation loss : 0.6475639428411212
Validation accuracy : 63.42857142857143
Epoch(15/75)
Training loss : 0.5031338196534377
Training accuracy : 76.0
Validation loss : 0.6453127477850232
Validation accuracy : 59.857142857142854
Epoch(16/75)
Training loss : 0.5206946088717535
Training accuracy : 73.46153846153847
Validation loss : 0.6998952286584037
Validation accuracy : 60.857142857142854
Epoch(17/75)
Training loss : 0.5122076616837428
Training accuracy : 75.23076923076923
Validation loss : 0.6461530412946429
Validation accuracy : 62.42857142857143
Epoch(18/75)
Training loss : 0.5238240292439094
Training accuracy : 74.53846153846153
Validation loss : 0.6752204043524606
Validation accuracy : 57.857142857142854
Epoch(19/75)
Training loss : 0.5082952380180359
Training accuracy : 74.92307692307692
Validation loss : 0.7006958978516715
Validation accuracy : 59.714285714285715
Epoch(20/75)
Training loss : 0.5238628708399259
Training accuracy : 73.46153846153847
Validation loss : 0.7357946463993618
Validation accuracy : 64.28571428571429
Epoch(21/75)
Training loss : 0.5141627696844248
Training accuracy : 75.92307692307692
Validation loss : 0.7382281976086753
Validation accuracy : 61.714285714285715
Epoch(22/75)
Training loss : 0.5125614863175613
Training accuracy : 76.0
Validation loss : 0.6475627081734794
Validation accuracy : 63.285714285714285
Epoch(23/75)
Training loss : 0.5197164187064538
Training accuracy : 75.07692307692308
Validation loss : 0.6952155658176967
Validation accuracy : 53.57142857142857
Epoch(24/75)
Training loss : 0.5072081776765677
Training accuracy : 77.76923076923077
Validation loss : 0.6628206542560032
Validation accuracy : 63.142857142857146
Epoch(25/75)
Training loss : 0.5012953556500949
Training accuracy : 77.46153846153847
Validation loss : 0.7428652388708932
Validation accuracy : 56.285714285714285
Epoch(26/75)
Training loss : 0.49909529319176305
Training accuracy : 75.92307692307692
Validation loss : 0.6398062109947205
Validation accuracy : 65.0
Epoch(27/75)
Training loss : 0.5104703398851248
Training accuracy : 75.92307692307692
Validation loss : 0.650032000882285
Validation accuracy : 64.0
Epoch(28/75)
Training loss : 0.5094260458762829
Training accuracy : 75.3076923076923
Validation loss : 0.6414277042661395
Validation accuracy : 62.42857142857143
Epoch(29/75)
Training loss : 0.5104429538433368
Training accuracy : 74.46153846153847
Validation loss : 0.6911386166300092
Validation accuracy : 59.57142857142857
Epoch(30/75)
Training loss : 0.5190693644376901
Training accuracy : 73.84615384615384
Validation loss : 0.6206706549440112
Validation accuracy : 71.42857142857143
Epoch(31/75)
Training loss : 0.5002665084141952
Training accuracy : 76.3076923076923
Validation loss : 0.7656925320625305
Validation accuracy : 59.57142857142857
Epoch(32/75)
Training loss : 0.4998622146936563
Training accuracy : 77.46153846153847
Validation loss : 0.6993421018123627
Validation accuracy : 59.714285714285715
Epoch(33/75)
Training loss : 0.49085464156590974
Training accuracy : 77.3076923076923
Validation loss : 0.6540211609431675
Validation accuracy : 69.57142857142857
Epoch(34/75)
Training loss : 0.4861009350189796
Training accuracy : 76.84615384615384
Validation loss : 0.7426223840032306
Validation accuracy : 58.0
Epoch(35/75)
Training loss : 0.5023441635645353
Training accuracy : 76.07692307692308
Validation loss : 0.6417391896247864
Validation accuracy : 64.28571428571429
Epoch(36/75)
Training loss : 0.4938283860683441
Training accuracy : 76.23076923076923
Validation loss : 0.6763659460203988
Validation accuracy : 65.14285714285714
Epoch(37/75)
Training loss : 0.4990261701437143
Training accuracy : 74.6923076923077
Validation loss : 0.6845237357275826
Validation accuracy : 60.714285714285715
Epoch(38/75)
Training loss : 0.5006357798209558
Training accuracy : 74.46153846153847
Validation loss : 0.6653249519211906
Validation accuracy : 66.0
Epoch(39/75)
Training loss : 0.5029854545226464
Training accuracy : 75.92307692307692
Validation loss : 0.7227288825171334
Validation accuracy : 60.57142857142857
Epoch(40/75)
Training loss : 0.4923394345320188
Training accuracy : 75.15384615384616
Validation loss : 0.6638393402099609
Validation accuracy : 71.28571428571429
Epoch(41/75)
Training loss : 0.49682273543798006
Training accuracy : 77.46153846153847
Validation loss : 0.6581927282469613
Validation accuracy : 67.71428571428571
Epoch(42/75)
Training loss : 0.4800969637357272
Training accuracy : 78.6923076923077
Validation loss : 0.6950864238398415
Validation accuracy : 63.142857142857146
Epoch(43/75)
Training loss : 0.4913203509954306
Training accuracy : 78.46153846153847
Validation loss : 0.6798910072871617
Validation accuracy : 66.85714285714286
Epoch(44/75)
Training loss : 0.48380434054594773
Training accuracy : 77.6923076923077
Validation loss : 0.6199514738151005
Validation accuracy : 67.71428571428571
Epoch(45/75)
Training loss : 0.48118181641285235
Training accuracy : 79.23076923076923
Validation loss : 0.7002703249454498
Validation accuracy : 60.57142857142857
Epoch(46/75)
Training loss : 0.4874083720720731
Training accuracy : 77.07692307692308
Validation loss : 0.6409953151430402
Validation accuracy : 65.14285714285714
Epoch(47/75)
Training loss : 0.4710811972618103
Training accuracy : 78.0
Validation loss : 0.6854062378406525
Validation accuracy : 62.142857142857146
Epoch(48/75)
Training loss : 0.47420090666184056
Training accuracy : 77.61538461538461
Validation loss : 0.7063780001231602
Validation accuracy : 54.42857142857143
Epoch(49/75)
Training loss : 0.4777089815873366
Training accuracy : 77.38461538461539
Validation loss : 0.7067130761487144
Validation accuracy : 59.857142857142854
Epoch(50/75)
Training loss : 0.47506147852310765
Training accuracy : 78.3076923076923
Validation loss : 0.6382426704679217
Validation accuracy : 66.85714285714286
Epoch(51/75)
Training loss : 0.4899247151154738
Training accuracy : 78.3076923076923
Validation loss : 0.7443346125738961
Validation accuracy : 60.714285714285715
Epoch(52/75)
Training loss : 0.4792615450345553
Training accuracy : 77.07692307692308
Validation loss : 0.7388890300478254
Validation accuracy : 54.285714285714285
Epoch(53/75)
Training loss : 0.4730924918101384
Training accuracy : 77.3076923076923
Validation loss : 0.7327760372843061
Validation accuracy : 59.714285714285715
Epoch(54/75)
Training loss : 0.48512481496884274
Training accuracy : 77.15384615384616
Validation loss : 0.7043442981583732
Validation accuracy : 59.0
Epoch(55/75)
Training loss : 0.47017852618144107
Training accuracy : 80.3076923076923
Validation loss : 0.6444277422768729
Validation accuracy : 62.42857142857143
Epoch(56/75)
Training loss : 0.4703746736049652
Training accuracy : 80.07692307692308
Validation loss : 0.645798419203077
Validation accuracy : 69.42857142857143
Epoch(57/75)
Training loss : 0.45782405596513015
Training accuracy : 79.15384615384616
Validation loss : 0.6591420429093497
Validation accuracy : 63.285714285714285
Epoch(58/75)
Training loss : 0.46316126447457534
Training accuracy : 79.3076923076923
Validation loss : 0.6351973371846336
Validation accuracy : 67.0
Epoch(59/75)
Training loss : 0.4586819318624643
Training accuracy : 79.92307692307692
Validation loss : 0.7222994438239506
Validation accuracy : 65.0
Epoch(60/75)
Training loss : 0.4681492608327132
Training accuracy : 77.6923076923077
Validation loss : 0.6935214229992458
Validation accuracy : 59.857142857142854
Epoch(61/75)
Training loss : 0.4668500262957353
Training accuracy : 79.38461538461539
Validation loss : 0.6826191714831761
Validation accuracy : 60.714285714285715
Epoch(62/75)
Training loss : 0.4645673403373131
Training accuracy : 78.38461538461539
Validation loss : 0.7330078227179391
Validation accuracy : 58.857142857142854
Epoch(63/75)
Training loss : 0.4624120340897487
Training accuracy : 78.61538461538461
Validation loss : 0.6402609518596104
Validation accuracy : 65.0
Epoch(64/75)
Training loss : 0.4621489964998685
Training accuracy : 79.76923076923077
Validation loss : 0.7175897785595485
Validation accuracy : 63.0
Epoch(65/75)
Training loss : 0.4651972513932448
Training accuracy : 77.15384615384616
Validation loss : 0.6253801115921566
Validation accuracy : 69.71428571428571
Epoch(66/75)
Training loss : 0.48504221668610203
Training accuracy : 76.92307692307692
Validation loss : 0.7335111456257957
Validation accuracy : 57.142857142857146
Epoch(67/75)
Training loss : 0.48089571641041684
Training accuracy : 77.6923076923077
Validation loss : 0.7028087249823979
Validation accuracy : 66.14285714285714
Epoch(68/75)
Training loss : 0.4547066390514374
Training accuracy : 80.61538461538461
Validation loss : 0.7729728647640773
Validation accuracy : 58.0
Epoch(69/75)
Training loss : 0.48003923892974854
Training accuracy : 79.23076923076923
Validation loss : 0.7004704901150295
Validation accuracy : 61.57142857142857
Epoch(70/75)
Training loss : 0.4561767280101776
Training accuracy : 78.15384615384616
Validation loss : 0.654385622058596
Validation accuracy : 66.0
Epoch(71/75)
Training loss : 0.4527375606390146
Training accuracy : 80.15384615384616
Validation loss : 0.6793372503348759
Validation accuracy : 63.42857142857143
Epoch(72/75)
Training loss : 0.4621993945195125
Training accuracy : 78.38461538461539
Validation loss : 0.7213071073804583
Validation accuracy : 63.42857142857143
Epoch(73/75)
Training loss : 0.46547736112888044
Training accuracy : 80.6923076923077
Validation loss : 0.5994927648987088
Validation accuracy : 69.57142857142857
Epoch(74/75)
Training loss : 0.44969407411722034
Training accuracy : 79.15384615384616
Validation loss : 0.7244599631854466
Validation accuracy : 58.0
In [80]:
%load_ext tensorboard
The tensorboard extension is already loaded. To reload it, use:
  %reload_ext tensorboard
In [89]:
%tensorboard --logdir=runs
Reusing TensorBoard on port 6008 (pid 19090), started 0:23:19 ago. (Use '!kill 19090' to kill it.)
In [92]:
y_pred_list = []
y_true_list = []
model.eval()
with torch.no_grad():
    num_correct = 0
    total = 0
    #set_trace()
    for batch, (images, labels) in enumerate(testloader,1):
        pred = model(images)
        #output = torch.exp(logps)
        pred = torch.argmax(pred, 1)
        y_pred_list.append(pred.numpy())
        y_true_list.append(labels.numpy())
        total += labels.size(0)
        num_correct += (pred == labels).sum().item()
        #print('accuracy', binary_acc(pred, labels).item())
        print(f'Batch ({batch}/{len(testloader)})')
        
        #if batch == 7:
            #break

    print(f'Accuracy of the model on {total} test images: {num_correct * 100 / total}% ')
Batch (1/13)
Batch (2/13)
Batch (3/13)
Batch (4/13)
Batch (5/13)
Batch (6/13)
Batch (7/13)
Batch (8/13)
Batch (9/13)
Batch (10/13)
Batch (11/13)
Batch (12/13)
Batch (13/13)
Accuracy of the model on 200 test images: 61.0% 
In [93]:
y_pred_list = []
y_true_list = []
with torch.no_grad():
    for batch, (images, labels) in enumerate(testloader,1):      
        y_test_pred = model(images)
        _, y_pred_tag = torch.max(y_test_pred, dim = 1)        
        y_pred_list = [*y_pred_list,*y_pred_tag.cpu().numpy()]
        y_true_list = [*y_true_list,*labels.cpu().numpy()]
In [94]:
y_pred_list_1 = np.array(y_pred_list).T
y_true_list_1 = np.array(y_true_list).T
#y_pred_list_1
In [95]:
exp_name = f"FCN with Dropout (p = 0.1)"
expLog.loc[5,:4] = [f"{exp_name}"] + list(np.round(
               [accuracy_stats['train'][-1], 
                accuracy_stats['val'][-1],
                (num_correct * 100 / total)],3))
expLog
/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py:719: FutureWarning: Slicing a positional slice with .loc is not supported, and will raise TypeError in a future version.  Use .loc with labels or .iloc with positions instead.
  indexer = self._get_setitem_indexer(key)
Out[95]:
exp_name Train Acc Valid Acc Test Acc
5 FCN with Dropout (p = 0.1) 79.154 58.0 61.0

Result in Tensorboard

image.png

FCN Regression

In [98]:
import torch
import torchvision
import torch.utils.data
import torchvision.transforms as transforms
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_absolute_error, mean_squared_error
In [96]:
import numpy as np
X = np.load('data/img.npy', allow_pickle=True)
y_bbox = np.load('data/y_bbox.npy', allow_pickle=True)
In [99]:
X_train, X_test, y_train, y_test = train_test_split(X, y_bbox, test_size=0.15, random_state=42)
X_train, X_validation, y_train, y_validation = train_test_split(X_train, y_train, test_size=0.15, random_state=42)
In [100]:
from torchsummary import summary  #install it if necessary using !pip install torchsummary 
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler


## Scaling
scaler = StandardScaler()
X_train =      scaler.fit_transform(X_train).astype(float)
X_validation = scaler.transform(X_validation).astype(float) #Transform valid set with the same constants
X_test =       scaler.transform(X_test).astype(float)       #Transform test  set with the same constants

# convert numpy arrays to tensors
X_train_tensor = torch.from_numpy(X_train).float()
X_validation_tensor = torch.from_numpy(X_validation).float()
X_test_tensor = torch.from_numpy(X_test).float()
y_train_tensor = torch.from_numpy(y_train).float()
y_test_tensor = torch.from_numpy(y_test).float()
y_validation_tensor = torch.from_numpy(y_validation).float()

# create TensorDataset in PyTorch
train_ds = torch.utils.data.TensorDataset(X_train_tensor, y_train_tensor)
validation_ds = torch.utils.data.TensorDataset(X_validation_tensor, y_validation_tensor)
test_ds = torch.utils.data.TensorDataset(X_test_tensor, y_test_tensor)
# create dataloader
batch_size = 96
train_loader = torch.utils.data.DataLoader(train_ds, batch_size=batch_size, shuffle=True, num_workers=0)
valid_loader = torch.utils.data.DataLoader(validation_ds, batch_size=X_test.shape[0], shuffle=False, num_workers=0)
test_loader = torch.utils.data.DataLoader(test_ds, batch_size=X_test.shape[0], shuffle=False, num_workers=0)
In [115]:
#regression neural network
class Regression(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
        self.pool1 = nn.MaxPool2d(2, 2)

        self.conv2 = nn.Conv2d(in_channels=64, out_channels=32, kernel_size=3)
        self.pool2 = nn.MaxPool2d(2, 2)

        self.conv3 = nn.Conv2d(in_channels=32, out_channels=16, kernel_size=3)
        self.pool3 = nn.MaxPool2d(2, 2)

        self.fc1 = nn.Linear(in_features=14*14*16, out_features=64)
        self.fc3 = nn.Linear(in_features=64, out_features=32)
        self.fc5 = nn.Linear(in_features=32, out_features=4) 

  
    def forward(self, x):
        x = self.pool1(F.relu(self.conv1(x)))
        x = self.pool2(F.relu(self.conv2(x)))
        x = self.pool3(F.relu(self.conv3(x)))

        x = nn.Flatten()(x)

        x = F.relu(self.fc1(x))
       
    
        x = F.relu(self.fc3(x))
       
        r = self.fc5(x)
       
        return r
In [116]:
loss_stats = {
    'train': [],
    "val": []
}
In [117]:
%reload_ext tensorboard
In [118]:
loss_fn = torch.nn.MSELoss(size_average=True)

optimizer = optim.Adam(model.parameters(), lr=0.00001, weight_decay = 0.005)

epochs = range(25)
count_t = 0 
running_loss = 0.0
for epoch in epochs:
    running_loss_t = 0.0
    for batch, data in enumerate(train_loader):
        # inputs, target = data[0].to(device), data[1].to(device)
        inputs, target = data[0], data[1]

        # Clear gradient buffers because we don't want any gradient from previous epoch to carry forward, dont want to cummulate gradients
        optimizer.zero_grad()

        # do forward pass
        output = model(inputs.float())
        #print(output.shape, target.shape)
        # compute loss and gradients
        loss = loss_fn(output, torch.unsqueeze(target.float(), dim=1))
        
        # get gradients w.r.t to parameters
        loss.backward()

        # perform gradient update
        optimizer.step()

        # print statistics
        running_loss_t += loss.item()*inputs.size(0)
        count_t += inputs.size(0)
    print(f"Epoch {epoch+1}, Train MSE loss: {np.round(running_loss_t/count_t, 3)}")
    loss_stats['train'].append(running_loss_t/count_t)

#print('Finished Training')
#Model evaluation on validation set
    count = 0 
    running_loss = 0.0
    test_size = 0
    model.eval()
    for batch, data in enumerate(valid_loader):
       
        inputs, target = data[0], data[1]
        # do forward pass
        output = model(inputs.float())
        # compute loss and gradients
        loss = loss_fn(output, torch.unsqueeze(target.float(), dim=1))
        running_loss += loss.item()*inputs.size(0)
        count += inputs.size(0) 
        test_size += batch_size

    print(f"Validation  MSE loss: {np.round(running_loss/count, 3)}")
    
    loss_stats['val'].append(running_loss/count)
    #for tensorboard
    writer.add_scalars('MSE', {'Training MSE': np.round(running_loss/count, 3),
                      'Validation MSE': np.round(running_loss/count, 3),}, epoch)
    
writer.close()

print("Finished Training!")

count = 0 
running_loss = 0.0
test_size = 0
model.eval()
for batch, data in enumerate(test_loader):
    
    inputs, target = data[0], data[1]
    # do forward pass
    output = model(inputs.float())
    # compute loss and gradients
    loss = loss_fn(output, torch.unsqueeze(target.float(), dim=1))
    # print statistics
    running_loss += loss.item()*inputs.size(0)
    count += inputs.size(0) 
    test_size += batch_size
print(f" Test  MSE loss: {np.round(running_loss/count, 3)}")

# predict test
# model.to(device)
Epoch 1, Train MSE loss: 0.01
Validation  MSE loss: 0.01
Epoch 2, Train MSE loss: 0.005
Validation  MSE loss: 0.01
Epoch 3, Train MSE loss: 0.003
Validation  MSE loss: 0.01
Epoch 4, Train MSE loss: 0.003
Validation  MSE loss: 0.01
Epoch 5, Train MSE loss: 0.002
Validation  MSE loss: 0.01
Epoch 6, Train MSE loss: 0.002
Validation  MSE loss: 0.01
Epoch 7, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 8, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 9, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 10, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 11, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 12, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 13, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 14, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 15, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 16, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 17, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 18, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 19, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 20, Train MSE loss: 0.001
Validation  MSE loss: 0.01
Epoch 21, Train MSE loss: 0.0
Validation  MSE loss: 0.01
Epoch 22, Train MSE loss: 0.0
Validation  MSE loss: 0.01
Epoch 23, Train MSE loss: 0.0
Validation  MSE loss: 0.01
Epoch 24, Train MSE loss: 0.0
Validation  MSE loss: 0.01
Epoch 25, Train MSE loss: 0.0
Validation  MSE loss: 0.01
Finished Training!
 Test  MSE loss: 0.01
In [121]:
expLog_R = pd.DataFrame(columns=["exp_name", 
                               "Train MSE", 
                               "Valid MSE",
                               "Test  MSE",
                              ])
In [122]:
#Logging the experiment
exp_name = f"FCN Regressor"
expLog_R.loc[8,:4] = [f"{exp_name}"] + list(np.round(
               [loss_stats['train'][-1], 
                loss_stats['val'][-1],
                running_loss/count],3))
expLog_R
/usr/local/lib/python3.7/site-packages/pandas/core/indexing.py:719: FutureWarning: Slicing a positional slice with .loc is not supported, and will raise TypeError in a future version.  Use .loc with labels or .iloc with positions instead.
  indexer = self._get_setitem_indexer(key)
Out[122]:
exp_name Train MSE Valid MSE Test MSE
8 FCN Regressor 0.0 0.01 0.01

Results

image.png

Multiheaded Neural network:

Steps to create the model:

  • Defined a model for classification and regression separately

  • For each epoch, we calculated CXE and MSE loss from the above models and then used the combined loss for back propagation

  • Adam optimizer was used to take the next step and update the weights and bias

image.png

Combining CXE + MSE

In [1]:
import pandas as pd
import numpy as np
from sklearn.metrics import classification_report, confusion_matrix
from torch.optim import Adam
import matplotlib.pyplot as plt
import seaborn as sns
In [2]:
# Setting seeds to try and ensure we have the same results - this is not guaranteed across PyTorch releases.
import torch
torch.manual_seed(0)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
In [3]:
import torch.nn as nn
import torch.nn.functional as F
from torchvision import datasets, transforms, models
from torch.utils.data import DataLoader, SubsetRandomSampler
import random
from os import listdir
from shutil import copyfile
In [4]:
import tensorflow as tf 
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from os import makedirs
In [5]:
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
device
Out[5]:
device(type='cpu')
In [6]:
from tensorflow.keras import models
from tensorflow.keras.applications import *
from tensorflow.keras import layers

Creating directories

In [29]:
#creating directories for test and train data set
dataset_home = 'cat_vs_dog/'
subdirs = ['train/', 'test/']
for subdir in subdirs:
	# create label subdirectories
	labeldirs = ['dogs/', 'cats/']
	for labldir in labeldirs:
		newdir = dataset_home + subdir + labldir
		makedirs(newdir, exist_ok=True)
In [30]:
#load the csv file
df = pd.read_csv("cadod.csv")
df.head()
Out[30]:
ImageID Source LabelName Confidence XMin XMax YMin YMax IsOccluded IsTruncated ... IsDepiction IsInside XClick1X XClick2X XClick3X XClick4X XClick1Y XClick2Y XClick3Y XClick4Y
0 0000b9fcba019d36 xclick /m/0bt9lr 1 0.165000 0.903750 0.268333 0.998333 1 1 ... 0 0 0.636250 0.903750 0.748750 0.165000 0.268333 0.506667 0.998333 0.661667
1 0000cb13febe0138 xclick /m/0bt9lr 1 0.000000 0.651875 0.000000 0.999062 1 1 ... 0 0 0.312500 0.000000 0.317500 0.651875 0.000000 0.410882 0.999062 0.999062
2 0005a9520eb22c19 xclick /m/0bt9lr 1 0.094167 0.611667 0.055626 0.998736 1 1 ... 0 0 0.487500 0.611667 0.243333 0.094167 0.055626 0.226296 0.998736 0.305942
3 0006303f02219b07 xclick /m/0bt9lr 1 0.000000 0.999219 0.000000 0.998824 1 1 ... 0 0 0.508594 0.999219 0.000000 0.478906 0.000000 0.375294 0.720000 0.998824
4 00064d23bf997652 xclick /m/0bt9lr 1 0.240938 0.906183 0.000000 0.694286 0 0 ... 0 0 0.678038 0.906183 0.240938 0.522388 0.000000 0.370000 0.424286 0.694286

5 rows × 21 columns

In [31]:
df.LabelName.replace({'/m/01yrx':'cat', '/m/0bt9lr':'dog'}, inplace=True)
In [32]:
dog_list = df[df.LabelName == 'dog']['ImageID']
cat_list = df[df.LabelName == 'cat']['ImageID']
#list(dog_list)
In [33]:
file_name_test = []
file_name_train = []
In [34]:
# moving images to test and train folder

random.seed(10)
# define ratio of pictures to use for test
test_ratio = 0.20
count_c = 0
count_d = 0

# copy training dataset images into subdirectories
src_directory = 'cadod/'
for file in listdir(src_directory):
    #print(file.replace('.jpg','').replace('._','') in list(cat_list))
    #print(file.replace('.jpg','').replace('._','') in list(dog_list))
    src = src_directory + '/' + file
    dst_dir = 'train/'
    if random.random() < test_ratio:
        dst_dir = 'test/'
        file_name_test.append(file.replace('.jpg','').replace('._',''))
    if file.replace('.jpg','').replace('._','') in list(cat_list) and count_c < 500:
        dst = dataset_home + dst_dir + 'cats/'  + file
        count_c +=1
        copyfile(src, dst)
        file_name_train.append(file.replace('.jpg','').replace('._',''))
    elif file.replace('.jpg','').replace('._','') in list(dog_list) and count_d < 500:
        dst = dataset_home + dst_dir + 'dogs/'  + file
        count_d +=1
        copyfile(src, dst)
        file_name_train.append(file.replace('.jpg','').replace('._',''))
In [35]:
train_id = pd.DataFrame (file_name_train, columns = ['ImageID'])
train_id.head()
Out[35]:
ImageID
0 2b55a824f4a375d3
1 bc26925fd646efe5
2 f8fccbefa2e8e33f
3 9c730899f38007cc
4 01901b6370020f3c
In [36]:
test_id = pd.DataFrame (file_name_test, columns = ['ImageID'])
test_id.head()
Out[36]:
ImageID
0 d00eb685487904b0
1 ddfc5237d20952a7
2 e60d548f2f124a01
3 f4add7bb2ee11f8d
4 8054527db8754ab1
In [37]:
df.ImageID.astype('O')
train_id.ImageID.astype('O')
df_n = df[['ImageID','XMin', 'YMin', 'XMax', 'YMax']]
df_n.set_index('ImageID')
train_id.set_index('ImageID')
train_id_n = df_n.join(train_id, how = 'left', lsuffix = '_left', rsuffix = '_right')
train_id_n.drop(columns = ['ImageID_right'], inplace = True)
train_id_n.head(5)
Out[37]:
ImageID_left XMin YMin XMax YMax
0 0000b9fcba019d36 0.165000 0.268333 0.903750 0.998333
1 0000cb13febe0138 0.000000 0.000000 0.651875 0.999062
2 0005a9520eb22c19 0.094167 0.055626 0.611667 0.998736
3 0006303f02219b07 0.000000 0.000000 0.999219 0.998824
4 00064d23bf997652 0.240938 0.000000 0.906183 0.694286
In [38]:
df.ImageID.astype('O')
test_id.ImageID.astype('O')
#df.set_index('ImageID')
test_id.set_index('ImageID')
test_id_n = df_n.join(test_id, how = 'left', lsuffix = '_left', rsuffix = '_right')
test_id_n.drop(columns = ['ImageID_right'], inplace = True)
test_id_n.head(5)
Out[38]:
ImageID_left XMin YMin XMax YMax
0 0000b9fcba019d36 0.165000 0.268333 0.903750 0.998333
1 0000cb13febe0138 0.000000 0.000000 0.651875 0.999062
2 0005a9520eb22c19 0.094167 0.055626 0.611667 0.998736
3 0006303f02219b07 0.000000 0.000000 0.999219 0.998824
4 00064d23bf997652 0.240938 0.000000 0.906183 0.694286
In [39]:
expLog = pd.DataFrame(columns=["exp_name", 
                               "Train Loss", 
                               "Valid Loss",
                               "Test Loss",
                              ])

Image Classification

In [40]:
mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225]

transform_test = transforms.Compose([
    #transforms.ToPILImage(),             
    transforms.Resize((128, 128)),
    transforms.ToTensor(),
    transforms.Normalize(mean=mean, std=std)
    ])
transform_train = transforms.Compose([
    #transforms.ToPILImage(),             
    transforms.Resize((128, 128)),
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(40),
    transforms.ToTensor(),
    transforms.Normalize(mean=mean, std=std)
    #transforms.RandomAutocontrast()
    
    ])
In [41]:
train_it = datasets.ImageFolder('cat_vs_dog/train/', transform=transform_train)
test_it = datasets.ImageFolder('cat_vs_dog/test/', transform=transform_test)

dataset_size = len(train_it)
dataset_indices = list(range(dataset_size))
np.random.shuffle(dataset_indices)
In [42]:
dataset_size
Out[42]:
800
In [43]:
idx2class = {v: k for k, v in train_it.class_to_idx.items()}
idx2class
Out[43]:
{0: 'cats', 1: 'dogs'}
In [44]:
dataset_size = len(train_it)
dataset_indices = list(range(dataset_size))
#dataset_indices[val_split_index:]
In [45]:
np.random.shuffle(dataset_indices)
In [46]:
val_split_index = int(np.floor(0.2 * dataset_size))
In [47]:
train_idx, val_idx = dataset_indices[val_split_index:], dataset_indices[:val_split_index]
In [48]:
train_sampler = SubsetRandomSampler(train_idx)
val_sampler = SubsetRandomSampler(val_idx)
In [50]:
bs_train = 16
bs_test = 4
bs_valid = 8
trainloader = DataLoader(dataset=train_it, shuffle=False, batch_size=bs_train, sampler=train_sampler)
valloader = DataLoader(dataset=train_it, shuffle=False, batch_size=bs_valid, sampler=val_sampler)
testloader = DataLoader(test_it, batch_size=bs_test, shuffle=False)
In [51]:
y_box_train = train_id_n[val_split_index:]
y_box_val =  train_id_n[:val_split_index]
y_box_val.shape
Out[51]:
(160, 5)
In [52]:
for images, labels in trainloader:
    print(images.size(), labels.size())
    print(labels)
    break
torch.Size([16, 3, 128, 128]) torch.Size([16])
tensor([1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1])
In [53]:
for images, labels in valloader:
    print(images.size(), labels.size())
    print(labels)
    break
torch.Size([8, 3, 128, 128]) torch.Size([8])
tensor([0, 0, 0, 0, 0, 1, 0, 0])
In [54]:
import numpy as np
X = np.load('data/img.npy', allow_pickle=True)
y_label = np.load('data/y_label.npy', allow_pickle=True)
y_bbox = np.load('data/y_bbox.npy', allow_pickle=True)
In [55]:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
In [56]:
y_train_tensor = torch.from_numpy(y_box_train[['XMin', 'YMin', 'XMax', 'YMax']].to_numpy())
y_val_tensor = torch.from_numpy(y_box_val[['XMin', 'YMin', 'XMax', 'YMax']].to_numpy())
y_test_tensor = torch.from_numpy(test_id_n[['XMin', 'YMin', 'XMax', 'YMax']].to_numpy())
#y_val_tensor

Classifier FCN

In [58]:
from torch.optim import Adam
#defining neural network layers
class cadod_c(nn.Module): 
    def __init__(self):
        super(cadod_c, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=10, kernel_size=3)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=3)
        self.conv2_drop = nn.Dropout2d(0.1)
        self.fc1 = nn.Linear(18000, 400)
        self.fc2 = nn.Linear(400, 2)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(x.shape[0],-1)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return x



model_c = cadod_c()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model_c.parameters(), lr=0.0002, weight_decay = 3e-3)
scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones = [500,1000,1500], gamma = 0.5)

Regressor FCN

In [60]:
#regression neural network
class cadod_r(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
        self.pool1 = nn.MaxPool2d(2, 2)

        self.conv2 = nn.Conv2d(in_channels=64, out_channels=32, kernel_size=3)
        self.pool2 = nn.MaxPool2d(2, 2)

        self.conv3 = nn.Conv2d(in_channels=32, out_channels=16, kernel_size=3)
        self.pool3 = nn.MaxPool2d(2, 2)

        self.fc1 = nn.Linear(in_features=14*14*16, out_features=64)
        self.fc3 = nn.Linear(in_features=64, out_features=32)
        self.fc5 = nn.Linear(in_features=32, out_features=4) 

  
    def forward(self, x):
        x = self.pool1(F.relu(self.conv1(x)))
        x = self.pool2(F.relu(self.conv2(x)))
        x = self.pool3(F.relu(self.conv3(x)))

        x = nn.Flatten()(x)

        x = F.relu(self.fc1(x))
       
    
        x = F.relu(self.fc3(x))
       
        r = self.fc5(x)
       
        return r
    
model_r = cadod_r()
# MSE loss scaffolding layer
loss_fn = torch.nn.MSELoss() 
optimizer = torch.optim.Adam(model_r.parameters(), lr=0.0005, weight_decay = 3e-4)
In [61]:
accuracy_stats = {
    'train': [],
    "val": []
}
loss_stats = {
    'train': [],
    "val": []
}
In [62]:
def binary_acc(y_pred, y_test):
    y_pred_tag = torch.log_softmax(y_pred, dim = 1)
    _, y_pred_tags = torch.max(y_pred_tag, dim = 1)    
    correct_results_sum = (y_pred_tags == y_test).sum().float()    
    acc = correct_results_sum/y_test.shape[0]
    acc = torch.round(acc * 100)    
    return acc
In [64]:
from torch.utils.tensorboard import SummaryWriter
import numpy as np

writer = SummaryWriter()
In [66]:
model_c = model_c.to(device)
model_r = model_r.to(device)


num_epochs = 50


for e in range(num_epochs):
    cum_epoch_loss = 0
    cum_acc = 0
    batch_loss = 0
    mse_loss = 0
    train = 0
    test = 0
    val = 0
    model_c.train()
    model_r.train()
    #Training the model
    for batch, (images, labels) in enumerate(trainloader,1):
        
        images = images.to(device)
        labels = labels.to(device)
        #images_2 = images_2.to(device)
        
        bbox = y_train_tensor[train:train+bs_train].to(device)
        train +=bs_train
        # Clear gradient buffers because we don't want any gradient from previous epoch to carry forward, dont want to cummulate gradients
        optimizer.zero_grad()
        label_pred = model_c(images).squeeze()  #training the classifier model
        box_pred = model_r(images)  #training the regressor model
        loss_1 = criterion(label_pred, labels) #CXE loss
        acc = binary_acc(label_pred, labels)
        loss_2 = loss_fn(box_pred, torch.unsqueeze(bbox.float(), dim=1)) #MSE
        loss = loss_1 + loss_2 #combined loss
        loss.backward() #backpropagating loss
        optimizer.step()  #gradient update
        batch_loss += loss.item()
        cum_acc += acc.item()
        
        scheduler.step()
        #print(f'Epoch({e}/{num_epochs} : Batch number({batch}/{len(trainloader)})')
    
    #Evaluating the model on validation set
    with torch.no_grad():
        model_c.eval()
        model_r.eval()
        val_epoch_loss = 0
        val_epoch_acc = 0
        
        val = 0
        for batch, (X_val_batch, y_val_batch) in enumerate(valloader,1):
            X_val_batch, y_val_batch = X_val_batch.to(device), y_val_batch.to(device)
            y_box_val = y_val_tensor[val:val+bs_valid].to(device)
            
            y_val_pred = model_c(X_val_batch).squeeze()
            y_box_pred = model_r(X_val_batch).squeeze()
                        
            val_loss = criterion(y_val_pred, y_val_batch)
            val_acc = binary_acc(y_val_pred, y_val_batch) 
            
            mse_loss = loss_fn(y_box_pred, torch.unsqueeze(y_box_val.float(), dim=1))
            
            val_epoch_loss += val_loss.item() + mse_loss.item()
            val_epoch_acc += val_acc.item()
            val += bs_valid
            
     #saving the results for plotting   
    loss_stats['train'].append(batch_loss/len(trainloader))
    loss_stats['val'].append(val_epoch_loss/len(valloader))
    accuracy_stats['train'].append(cum_acc/len(trainloader))
    accuracy_stats['val'].append(val_epoch_acc/len(valloader))
    
    print(f'Epoch({e}/{num_epochs})')
    print(f'Training loss : {batch_loss/len(trainloader)}')  
    print(f'Training accuracy : {cum_acc/len(trainloader)}')  
    print(f'Validation loss : {val_epoch_loss/len(valloader)}')  
    print(f'Validation accuracy : {val_epoch_acc/len(valloader)}') 
    writer.add_scalars('CXE + MSE Loss', {'Training': np.round(batch_loss/len(trainloader), 3),
                      'Validation': np.round(val_epoch_loss/len(valloader), 3),}, e)
    
writer.close()   
Epoch(0/50)
Training loss : 0.7118749812245369
Training accuracy : 49.35
Validation loss : 0.7100486849900335
Validation accuracy : 51.95
Epoch(1/50)
Training loss : 0.7090466111898422
Training accuracy : 48.6
Validation loss : 0.7075532027520239
Validation accuracy : 51.75
Epoch(2/50)
Training loss : 0.7081201106309891
Training accuracy : 52.5
Validation loss : 0.704474622849375
Validation accuracy : 51.9
Epoch(3/50)
Training loss : 0.7084089532494545
Training accuracy : 49.725
Validation loss : 0.7061632547527552
Validation accuracy : 51.9
Epoch(4/50)
Training loss : 0.7080016046762466
Training accuracy : 49.575
Validation loss : 0.7052379011176526
Validation accuracy : 51.9
Epoch(5/50)
Training loss : 0.7057248204946518
Training accuracy : 50.7
Validation loss : 0.705911069130525
Validation accuracy : 51.9
Epoch(6/50)
Training loss : 0.706674014031887
Training accuracy : 50.5
Validation loss : 0.7070628259563818
Validation accuracy : 51.7
Epoch(7/50)
Training loss : 0.7057572767138481
Training accuracy : 50.35
Validation loss : 0.7050061433576047
Validation accuracy : 51.85
Epoch(8/50)
Training loss : 0.7090481474995614
Training accuracy : 49.65
Validation loss : 0.7057594538200647
Validation accuracy : 51.8
Epoch(9/50)
Training loss : 0.7076527655124665
Training accuracy : 52.475
Validation loss : 0.7033122044522315
Validation accuracy : 51.95
Epoch(10/50)
Training loss : 0.7071493312716484
Training accuracy : 50.975
Validation loss : 0.7040359573205933
Validation accuracy : 52.55
Epoch(11/50)
Training loss : 0.7090287208557129
Training accuracy : 48.8
Validation loss : 0.7053229030687362
Validation accuracy : 51.8
Epoch(12/50)
Training loss : 0.7080927088856697
Training accuracy : 50.0
Validation loss : 0.7084278791211546
Validation accuracy : 51.75
Epoch(13/50)
Training loss : 0.7073122054338455
Training accuracy : 50.775
Validation loss : 0.7052912323735654
Validation accuracy : 51.85
Epoch(14/50)
Training loss : 0.7102532595396042
Training accuracy : 48.75
Validation loss : 0.7062017263611778
Validation accuracy : 51.2
Epoch(15/50)
Training loss : 0.7079784229397774
Training accuracy : 52.15
Validation loss : 0.703770897584036
Validation accuracy : 52.25
Epoch(16/50)
Training loss : 0.7098743841052055
Training accuracy : 49.025
Validation loss : 0.7077040287898854
Validation accuracy : 51.3
Epoch(17/50)
Training loss : 0.7076957255601883
Training accuracy : 49.725
Validation loss : 0.7041498473845422
Validation accuracy : 51.75
Epoch(18/50)
Training loss : 0.7092839688062668
Training accuracy : 48.275
Validation loss : 0.7020973746664823
Validation accuracy : 51.9
Epoch(19/50)
Training loss : 0.7069541826844216
Training accuracy : 51.7
Validation loss : 0.7059909645933657
Validation accuracy : 51.75
Epoch(20/50)
Training loss : 0.7089877456426621
Training accuracy : 49.5
Validation loss : 0.7029033537954092
Validation accuracy : 52.5
Epoch(21/50)
Training loss : 0.7093431070446968
Training accuracy : 49.6
Validation loss : 0.7053107283078134
Validation accuracy : 51.85
Epoch(22/50)
Training loss : 0.7060155525803566
Training accuracy : 51.25
Validation loss : 0.706568481400609
Validation accuracy : 51.85
Epoch(23/50)
Training loss : 0.7043239995837212
Training accuracy : 51.325
Validation loss : 0.7051448501180857
Validation accuracy : 51.95
Epoch(24/50)
Training loss : 0.7063856944441795
Training accuracy : 50.2
Validation loss : 0.7046565556433052
Validation accuracy : 51.95
Epoch(25/50)
Training loss : 0.7079715386033059
Training accuracy : 50.35
Validation loss : 0.7027813681401313
Validation accuracy : 51.85
Epoch(26/50)
Training loss : 0.7046286404132843
Training accuracy : 49.025
Validation loss : 0.7050394255900756
Validation accuracy : 52.6
Epoch(27/50)
Training loss : 0.7052292883396148
Training accuracy : 51.75
Validation loss : 0.7039080997928977
Validation accuracy : 52.0
Epoch(28/50)
Training loss : 0.7064696460962295
Training accuracy : 50.375
Validation loss : 0.7067568204365671
Validation accuracy : 51.8
Epoch(29/50)
Training loss : 0.7079446151852608
Training accuracy : 50.425
Validation loss : 0.7051233590114862
Validation accuracy : 51.2
Epoch(30/50)
Training loss : 0.7054599434137344
Training accuracy : 49.525
Validation loss : 0.7058732388541102
Validation accuracy : 51.85
Epoch(31/50)
Training loss : 0.7092289000749588
Training accuracy : 49.9
Validation loss : 0.7052725095767528
Validation accuracy : 52.0
Epoch(32/50)
Training loss : 0.7073726713657379
Training accuracy : 49.525
Validation loss : 0.7045369705185294
Validation accuracy : 51.8
Epoch(33/50)
Training loss : 0.7098496854305267
Training accuracy : 47.875
Validation loss : 0.703081227792427
Validation accuracy : 51.9
Epoch(34/50)
Training loss : 0.705561313033104
Training accuracy : 51.8
Validation loss : 0.7062440622597933
Validation accuracy : 51.9
Epoch(35/50)
Training loss : 0.7097637414932251
Training accuracy : 51.225
Validation loss : 0.7037342146970331
Validation accuracy : 51.85
Epoch(36/50)
Training loss : 0.705867825448513
Training accuracy : 52.825
Validation loss : 0.7055256116203964
Validation accuracy : 51.75
Epoch(37/50)
Training loss : 0.709127263724804
Training accuracy : 46.75
Validation loss : 0.7061041045933962
Validation accuracy : 51.95
Epoch(38/50)
Training loss : 0.7112988963723182
Training accuracy : 48.975
Validation loss : 0.7055594420526177
Validation accuracy : 51.85
Epoch(39/50)
Training loss : 0.7067484065890313
Training accuracy : 51.0
Validation loss : 0.7024275815114379
Validation accuracy : 52.0
Epoch(40/50)
Training loss : 0.7071689069271088
Training accuracy : 51.2
Validation loss : 0.7050982115790247
Validation accuracy : 52.05
Epoch(41/50)
Training loss : 0.7045126989483833
Training accuracy : 51.1
Validation loss : 0.7048486781772226
Validation accuracy : 51.9
Epoch(42/50)
Training loss : 0.7085898339748382
Training accuracy : 50.45
Validation loss : 0.7029092389857396
Validation accuracy : 51.8
Epoch(43/50)
Training loss : 0.7081213623285294
Training accuracy : 49.525
Validation loss : 0.7050800462719053
Validation accuracy : 52.4
Epoch(44/50)
Training loss : 0.7069022133946419
Training accuracy : 50.75
Validation loss : 0.7027802959550172
Validation accuracy : 52.45
Epoch(45/50)
Training loss : 0.7095731496810913
Training accuracy : 48.55
Validation loss : 0.7058138457126916
Validation accuracy : 51.8
Epoch(46/50)
Training loss : 0.7088750466704369
Training accuracy : 49.425
Validation loss : 0.7031038623768836
Validation accuracy : 51.95
Epoch(47/50)
Training loss : 0.7069298774003983
Training accuracy : 49.1
Validation loss : 0.70489386706613
Validation accuracy : 51.75
Epoch(48/50)
Training loss : 0.7105465099215508
Training accuracy : 48.3
Validation loss : 0.705224594520405
Validation accuracy : 53.2
Epoch(49/50)
Training loss : 0.7092552751302719
Training accuracy : 48.9
Validation loss : 0.7039555440656841
Validation accuracy : 51.8
In [67]:
%load_ext tensorboard
In [68]:
%tensorboard --logdir=runs

tensor board images will not be seen here. Following cells will have the image from tensorboard

In [ ]:
 
In [69]:
#Getting testing loss
y_pred_list = []
y_true_list = []
#model.eval()
#with torch.no_grad():
with torch.no_grad():
        model_c.eval()
        model_r.eval()
        test_epoch_loss = 0
        test_epoch_acc = 0
        #val_mse_loss = 0
        test = 0
        for batch, (X_test_batch, y_test_batch) in enumerate(testloader,1):
            X_test_batch, y_test_batch = X_test_batch.to(device), y_test_batch.to(device)
            y_box_test = y_test_tensor[test:test+bs_valid].to(device)
            #print(y_box_val)
            y_test_pred = model_c(X_test_batch).squeeze()
            y_box_pred = model_r(X_test_batch).squeeze()
            #y_val_pred = torch.unsqueeze(y_val_pred, 0)            
            test_loss = criterion(y_test_pred, y_test_batch)
            test_acc = binary_acc(y_test_pred, y_test_batch) 
            #print(y_box_val)
            #print(y_box_pred)
            mse_loss = loss_fn(y_box_pred, torch.unsqueeze(y_box_test.float(), dim=1))
            #print(val_loss.item(),mse_loss.item())
            test_epoch_loss += test_loss.item() + mse_loss.item()
            test_epoch_acc += test_acc.item()
            test += bs_valid
            
        

        #print(f'Epoch({e}/{num_epochs})')
        print(f'Test loss : {test_epoch_loss/len(testloader)}')  
          
        
/N/u/svtranga/Carbonate/.local/lib/python3.7/site-packages/torch/nn/modules/loss.py:431: UserWarning: Using a target size (torch.Size([8, 1, 4])) that is different to the input size (torch.Size([4, 4])). This will likely lead to incorrect results due to broadcasting. Please ensure they have the same size.
  return F.mse_loss(input, target, reduction=self.reduction)
Test loss : 0.7089972050581127

Results

image.png

Challenges

  • Complex homegrown model did not converge well and resulted in a flat accuracy curve

  • Limited computing power of IU Red and Google Colab, which made the model fail unexpectedly during run time

  • We were not able to run all the efficientdet models since the training time was very high. Even 30 epoch took more than 4 hours to train

    • Due to this, we were not able to fine tune the model and improve the mAP score

    • Plotting the image with true and predicted value was an issue since plt.imshow did not display the image

  • Using MLP and FCN did not improve the accuracy to a greater extent, the accuracy from these models is still comparable to our baseline model (ie slight improvement in validation accuracy)

  • Though data augmentation, adding regularization, changing the number of epochs, and modifying layers helped us overcome overfitting, the performance did not improve significantly, and the accuracy was comparable to our baseline

Conclusion

image.png

Our main objective was to classify images of cats and dogs and to identify the location. This fundamental problem in computer vision is the basis of many other computer vision tasks. However, this field has grown multifolds in the last year and currently, we are able to classify the image and detect the boundary boxes in a single go.

In the previous phase, we used neural networks with data augmentation, drop out layers and regularization to make the prediction, which reduced overfitting the model and yielded us with an accuracy of ~60%. In addition to this, we also combined the CXE and MSE loss and then sent it back for optimization of the neural network which helped us reduce the loss steadily after each epoch. The final phase was concentrated on the following:

  • Created a homegrown linear and logistic regression model and combine the MSE and CXE losses. Here we were able to attain a training CXE + MSE of 48.5 and a validation loss of 59

  • Built an EfficientDet model [D0 – D7] to train our classifier and regressor.

  • A multi-headed fully convolutional neural network (FCN) was also implemented which gave us a test accuracy of 61%.

From the above table, though there were slight improvements in the FCN model in terms of training accuracy, the validation accuracy remained consistent and is less than our baseline model

Next Steps

  • We can improve the efficientdet by increasing the number of epochs and trainign multiple head layers
    • This can help us get a mAP value close to SOTA
  • We can improve the FCN model by adding more dense and maxpool layers
  • Do a kaggle submission once we get a better accuracy
In [ ]: